トップページ⇒php
1001コメント298KB

CGIだけど、なんか質問ある? Part 6

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/07/06 13:41ID:Mpxtn4bk
CGIの運用に関する質問スレッドです。

※CGIは特定の言語に依存するものではありません。

※Perlのコーディングに関する質問は専用スレがありますのでそちらでお願いします。
  ↓
  Perl 初心者コーナー Part13
  http://pc.2ch.net/test/read.cgi/php/1022731565/l50

過去ログ・関連スレッドは >>2
0435nobodyさん02/08/05 14:49ID:???
アスキーモードでうpしてるよな?
0436nobodyさん02/08/05 14:54ID:???
ごめんなさい、なんだから直りました。
短時間に何回もアップロードやりまくってたらエラーが出たんでサーバーが疲れてたのかもしれません。
0437nobodyさん02/08/05 15:24ID:???
んなわけねーだろ。
0438nobodyさん02/08/05 20:21ID:Cv0Vcdj1
warata
0439nobodyさん02/08/06 16:13ID:ov0Bn0l9
cgiの中でxmlファイルを生成して、(xslは当然もとから用意しておいて)
xmlをhtmlに変換する事はできますか?

xmlとxslだけではIEでしか表示できないので普通に手作業で、
msxsl.exeを使ってhtmlへ変換していましたが
今回はcgiでxmlを生成してそこからhtmlへ変換することになったのです。
なのでmsxsl.exeの役割をcgiの中でも出来るのかどうかというわけなのです。
0440nobodyさん02/08/06 16:18ID:ov0Bn0l9
つまりxslt機能を搭載したサーバーはあるんざんしょか。
という話です。
0441トウモロコシ02/08/06 18:39ID:AiGWWT1t
gzipってなんでしょうか?
0442nobodyさん02/08/06 18:46ID:???
GNU ZIP のこと。
HTTP圧縮の際にも利用される。
0443トウモロコシ02/08/06 18:51ID:AiGWWT1t
どうもありがとう♪
0444nobodyさん02/08/06 18:54ID:+CLAZ6EK
IEで、キャッシュを無効にするにはどうしたらいいでしょう。
cgiからの出力を、ブラウザの戻るボタン押下時に意図的にリ
ロードさせたいだけなんですが。。。

<%
Response.AddHeader "Expires", "0"
If Request.ServerVariables("SERVER_PROTOCOL") = "HTTP/1.0" Then
Response.AddHeader "Pragma","no-cache"
Response.CacheControl = "no-cache"
Else
Response.CacheControl = "no-cache"
End If
%>
とか
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">
とか
試したんですが無理でした。

誰かよろしくお願いしますっ!


0445nobodyさん02/08/06 19:21ID:???
>444
ttp://tohoho.wakusei.ne.jp/wwwxx008.htm
0446nobodyさん02/08/06 19:30ID:???

CGI 利用可能なレンタルスペース(鯖?)
ではだいたい Jcode.pm は使えるのでしょうか?
0447nobodyさん02/08/06 19:44ID:???
>>446
サーバによる。面倒だから俺は自分で置いてる。
ローカルとリモートで参照パス変えるのだるいし。
0448nobodyさん02/08/06 20:10ID:???

<meta> タグで漢字コード euc-jp 指定して、
CGI の出力も EUC-JP にしてるのに Mozilla
で文字化けするんですけど、どうにかなりませんか?
0449 02/08/06 20:13ID:???
>>448
ブラウザのフォントを日本語(EUC)にする。
0450nobodyさん02/08/06 20:28ID:???

AutoDetect して欲しいんです。
0451nobodyさん02/08/06 20:34ID:???
>>448
ホントに出力がEUCになってる?
Mozillaで文字コード変更する前は何が文字コードとして選ばれてる状態になってる?
0452nobodyさん02/08/06 20:55ID:???

ISO-8859-1 です。
0453nobodyさん02/08/06 21:22ID:???
>>448
HTTPヘッダとHTMLヘッダ、両方を正確に出力してるなら
(今の書き込みからは、上手く行かない以上の事が何も分からない)
それは古いブラウザ特有の誤認識
昔はYAHOOなんかでも色々工夫がしてあった

http://www.google.com/search?num=100&hl=ja&ie=UTF-8&oe=utf-8&q=%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6+%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89+%E3%81%8A%E3%81%BE%E3%81%98%E3%81%AA%E3%81%84&btnG=Google+%E6%A4%9C%E7%B4%A2
0454nobodyさん02/08/06 22:11ID:???
>453
サンクス
0455nobodyさん02/08/07 00:08ID:???
1いますか?
0456nobodyさん02/08/07 14:53ID:???
やっぱりPerlで書くべきですか?
0457nobodyさん02/08/07 18:24ID:???
何の話だよ。
0458nobodyさん02/08/07 23:07ID:Ebqa+zWc
SSIって2重に使えるの?
2重という言い方で通じなかったら、入れ子で使えるの?
a.htmlに、<!-- SSI命令なんちゃら-->ABCDEFG
と書いておいて、b.htmlに<!--a.htmlをここに呼び出すSSI命令-->
と書いて、OK?
045945802/08/07 23:39ID:Ebqa+zWc
いま自分で試して見たらできました。
2重でも3重でもできそう。
これを駆使すればいろいろおもしろいことができそう。
あんなことやらこんなことやら、、
0460nobodyさん02/08/07 23:41ID:???
それくらいなら簡単に試せるだろうに。
0461nobodyさん02/08/07 23:42ID:???
1さ〜ん
0462nobodyさん02/08/07 23:53ID:ndE0k5iF
すみませんが質問です
http://hp.bird.to/info/countget.htmlのCGIで
連続でカウンタが回されないようになっているようですが
これはどのような仕組みで回らないようになっているんでしょうかねぇ?

自分で色々試した結果
cookieではないようです

ってことは相手のcgi側でアクセスログを取っているってことですよねぇ?
これを回避してカウンタを回すにはどうすればよろしいのでしょうか?
串刺してアクセスすれば回せますよねぇ?
0463nobodyさん02/08/08 00:02ID:???
前の数回のIPでも記憶しておいて、それと照合して合ったらカウントしない。
0464nobodyさん02/08/08 00:02ID:???
なんで変なの一杯来てるの?
0465nobodyさん02/08/08 00:07ID:???
>>464
自己紹介せんでええ。
046646202/08/08 00:08ID:kiQ1aKPI
>>463
レスありがとうございました
ってことはIP変えれば(串通せば)カウンタを回す事が出来るんですね?
0467nobodyさん02/08/08 00:12ID:???
生→串→生→串→、、、とローテーション組めばどんどん回る
0468nobodyさん02/08/08 00:15ID:???
ははは
0469質問02/08/08 01:28ID:o/KxESaR
2ちゃんのリンク集を作っているのですが、ライブなスレッドと
過去ログに行ってHTML化されたスレッドはどのように判別すれば
いいですか。ライブなスレッドは板が引越ししたら
URLを変えないといけないが、すでにHTML化されたスレッド
だったらURLを変えてしまうと見れなくなる。だからそのスレッドが
ライブなのか、過去ログに行ってHTML化されているのか判別して、
ライブだったら板の移転に合わせてURLを変更し、HTML化されて
いればURLをいじらずにそのままにするようにしなければならない。
その判別はどうやったらいいのか。
0470nobodyさん02/08/08 01:30ID:67DgjdRz
自分が手でやってる事をコードに書くだけ
047146202/08/08 12:37ID:kiQ1aKPI
>>467
そうですよね
でも漏れの知っている串(http://www8.big.or.jp/~000/CyberSyndrome/で検索)では
ホスト名&IPなどが隠せないんですよ
ちゃんと匿名串を使っているのに…

鬱だ……
0472nobodyさん02/08/08 12:45ID:???
>471
同じIPからだと1日1カウントしか収集しないんじゃないかな?
だとしたら、10個カウンター回したいなら、10個のIPが必要。
047346202/08/08 13:00ID:kiQ1aKPI
>>472
 >>467のようにすると何回でも回せるみたいです
漏れは串持ってないので携帯を使ってます
実験ではPC→携帯電話→PCを繰り返すと回ります
でも携帯使うと通信料が一回12円かかります
どうしましょう…
0474nobodyさん02/08/08 14:36ID:???
ちょっと臭いな
047546202/08/08 17:05ID:kiQ1aKPI
>>472
やっぱり10回まわすなら10個のIP必要ですね
カウンタは>>467のようにすれば回りますが、
キリ番ゲットページで「あなたのカウント」は回ってないんですよ

どぉ〜しましょ
0476nobodyさん02/08/08 17:24ID:???
>475
そもそもなんで回したいのよ?
不正な方法でキリ番ゲットしたいの?
047746202/08/08 17:31ID:kiQ1aKPI
>>476
キリ番げっとするとプレゼントが貰えるんです

携帯電話でのアクセスでは
「あなたのカウント」が「未取得」になってしまいます

串を使っても、そうなってしまう可能性が出てきました
もうだめぽ……鬱
0478nobodyさん02/08/08 17:36ID:???
カエレ(・∀・)!!
0479.02/08/08 18:11ID:???
アホか。
0480nobodyさん02/08/08 19:12ID:???
┐('〜`;)┌ 臭いと思ったら
0481質問です02/08/08 21:49ID:o/Pn3LPJ
cgiでhtmlを書き出すときにSSIをprintするとそのまま

<!--#include file="xx.html" -->

って出てしまうのですが、
.htaccessのAddTypeに.htmlを加えるしかないのでしょうか?
他の解決方法を教えてください。

どなたか答えてくれるとうれしいです。よろしくおねがいします。
0482nobodyさん02/08/08 22:01ID:???
CGIでSSIをしてるの?

意味無い気がする。
0483Apache/1.3.20@RHL7.2J02/08/09 00:49ID:???
次レスのスクリプトをWEBで実行しようとしたのですが、
下記のログようなエラー(Internal Server Error)になります。
ちなみに、webサーバマシンでスクリプトを実行して、html文にリダイレクトしたら、思うようにページが表示されるのですが…
(./googre2.cgi > googre2.html)
どこが間違ってるところはどこなのでしょうか?

[Thu Aug 8 19:43:16 2002] [error] [client 10.10.1.38] script not found or
unable to stat: /var/www/html/cgi-bin/googre2.cgi
[Thu Aug 8 19:43:52 2002] [error] [client 10.10.1.38] Premature end of
script headers: /var/www/html/cgi-bin/google2.cgi
0484483のスクリプトです02/08/09 00:53ID:GqWWhT2W
#!/usr/bin/perl

print '<!DOCTYPE HTML PUBLIC"-//W3C/DTD HTML 3.2 Final//EN">';
print '<HTML>';
print '<HEAD>';
print '<TITLE>google_mail1</TITLE>';
print '</HEAD>';
print '</body>';
print '<META http-equiv="Refresh"
content="0;URL=http://www.google.co.jp/search?q=&ie=UTF-8&oe=UTF-8&hl=ja&btn
G=Google+%
E6%A4%9C%E7%B4%A2&lr=">';
print '<base target="_top">';
print '</NOFRAMES>';
print '</FRAMESET>';
print '</HTML>';

他のスクリプトはWEB上で実行できてます。
スクリプトは、WinPCからtelnetでログインして貼り付けました。
前レス「間違ってるところはどこなのでしょうか? 」の間違いです。すみません。
0485nobodyさん02/08/09 01:18ID:???
CGIにはヘッダというものが必要です。

print '</NOFRAMES>';
print '</FRAMESET>';

これは何なの? キミはまだCGI以前にタグの学習が必要では?
0486nobodyさん02/08/09 03:17ID:???
> CGIにはヘッダというものが必要です。

そんなことはない。
0487nobodyさん02/08/09 03:35ID:???
>>485
どこに突っ込んでるの?
s/CGIには/CGIスクリプトの出力には/
ならOK?
0488K02/08/09 07:19ID:u713FiUQ
会社で、研修があって某予約システムを作ることになりました。
この後に控えている私の仕事がCを使うということもあって、「どうせならC言語でCGI作ってみて」という話になりました。
WEBサーバとSQLサーバには何を選択してもいいのですが今のところは、
MicrosoftのSQLサーバとIISを使用する予定です。

ただ、いくら本を探してもC言語でSQLサーバとやり取りする方法の書かれたものが見当たりません。

当方はWindows2000を使っています。
とりあえず、IIS上でCでコンパイルした実行可能CGIファイルを動かしたいのですが、うまく動きません。

動かそうとすると、ユーザ名とパスワードを要求されます。
(ちなみにこのCGIプログラムをコマンドプロンプトで実行するとちゃんとHTML形式の文書が出力されます。
(よくあるHELLO WORLDです。(^^;))
ファイルのパーミッション(右クリック→プロパティ→セキュリティ)はeveryoneでフルコントロールです。

長くなりましたが、現在足がかりがほとんどない状態です。
どなたかアドバイスやお勧めの本やWEBページがありましたら教えてもらえると幸いです。
お願いします。m(_ _)m
0489nobodyさん02/08/09 11:43ID:???
$page=$ENV{QUERY_STRING}
〜
my $start = ($page * $one_page) + 1;
my $end = $start + $one_page - 1;
my $i = 0;
open IN , $data_file;
while ( <IN> ) {
last if $i++ >= $end;
print if $i >= $start;
}
close IN;
my $next = $page - 1;
my $back = $page + 1;
my $p_start = ($page * $one_page)+1;
my $p_end = int ( $max_article / $one_page );

print qq|<p>|;
print qq|<a href="$script_name?$next"><< 新しめの$one_page件</a> \n| if $next >= 0;
for ( $p_start..$p_end ) { print qq|<a href="$script_name?$_"><$_></a>|; }
print qq| <a href="$script_name?$back">古めの$one_page件 >></a>\n| if $end < $max_article;
print qq|</p></body>\n</html>|;

ページングとやらをやってみようと、何とかページ数の表示は出るようになったんですが、
肝心の記事表示がまともに出来ません。どこが間違っているんでしょうか。
ちなみに、
$max_articleは現在の件数。$one_pageは1ページに表示する件数。
$data_fileは1行ずつ↓のような形式で保存してます。
<h2>[$num] $name - $date</h2><p class="i">$comment</p>
0490nobodyさん02/08/09 11:55ID:???
>>489
ソースの一部だけ見せられても、$one_page とかにどんな値があるのかないのか
さえわからんだろ。
049148902/08/09 12:22ID:???
>>490
そう思ったので$max_articleと$one_pageの値に関しては後半に書いておきました。
0492nobodyさん02/08/09 12:27ID:???
>>491
だから、実際のソースに値があるのかないのかがわからんだろ。
049348902/08/09 12:51ID:???
my $one_page = 10;

open IN , $data_file;
my $max_article = <IN> =~ /^<h2>\[(\d+)\]/;
$max_article = $1;
close IN;

変数の宣言部分を省略していたのがまずかったですね。
$data_fileの一行目が最新の記事で、$numに記事の番号を記録しているので、
そこから数値を抜き出して記録されている件数としています($max_article)
049448902/08/09 13:04ID:???
自己解決しました。スレ汚しスミマセヌ(´・ω・`)
0495困ったチャン02/08/09 17:41ID:???
CGIファイルから処理の途中で
別のCGIファイルを呼び出す方法をおせーて?
BY困ったチャン
0496困ったチャン 02/08/09 17:44ID:???
追伸
すいませんけど
Perlです
BY困ったチャン
0497nobodyさん02/08/09 18:32ID:???
意味がわからん。
別のCGI内のサブルーチンでも使いたいのか?
0498nobodyさん02/08/09 18:34ID:???
#>>495
#> おせーて?
#
#ここに疑問符が付くのは疑問な訳だが...

``
0499nobodyさん02/08/09 19:05ID:???
WEBで落とせるチャットCGIをいじってます。

ログに書き込み者のIPを記録し、そのままHTML出力に表示させたいのですが、
全部の行が同じIPになってしまいます。
(違うIPになると、全行のIPがそれになってしまう)

$ad = $ENV{'REMOTE_ADDR'};
とCGIに記述して、
表示させたい部分に$adを埋めるだけじゃダメなんですか?
0500nobodyさん02/08/09 19:10ID:???
だめ。
それじゃ、見た人のIPにしかならない。
別ファイルに書き込んで、読み込むなりしないと。
050149902/08/09 19:21ID:???
>>500
ご助言ありがとう。
いま、DATに書き込み者のIPを記録するようにしました。
こんどはどうやって読ませようか悩んでます。
いい手本が手元にないんですよ。
0502nobodyさん02/08/09 19:40ID:???
>501
手元になければ探せ。
いくらでも転がってるぞ。
0503nobodyさん02/08/09 20:16ID:???
cgi内で、別のプロセスを起動させるとエラーになるんですけど........
system($cmd,$arg);を使う時はapacheに何か、設定を加える必要ありですか?

0504nobodyさん02/08/09 22:37ID:???
エラーの内容書け。
0505にすと02/08/10 00:07ID:k/CbtY7I
新しい質問なんですけど、kent-web(http://www.kent-web.com/)のyycahtを使っているんですけど、トップから入室者を表示させる方法は
ありますか?
もし、ありましたらお教え下さい。
0506nobodyさん02/08/10 00:11ID:???
member.dat を外部から読み出してtopに表示。
SSIが使えない環境だと難しい。
0507nobodyさん02/08/10 00:13ID:???
>>505
【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/l50

改造を頼むのなら上のスレの1に書かれていることちゃんと読んでからな。
ま、このスレの>>1も読めないやつには無理かもしれんが(w
0508nobodyさん02/08/10 01:44ID:???
>>488
IISの設定確認しろ。
ローカル環境で試してるのか?
そうでなければコンピュータへのユーザ権限がない。
その他ユーザ回りをしっかり確認しろ。
0509nobodyさん02/08/10 16:20ID:???
<form action="mailto:mailaddress">
でフォームを送信してもらったあと「送信しました」ページを表示させる方法を
教えてください。
0510nobodyさん02/08/10 16:23ID:???
何か間違えている可能性。
0511nobodyさん02/08/10 22:28ID:???
うん。
0512nobodyさん02/08/10 23:05ID:???
>>509
JavaScriptでできそう。
板違いなのでage
0513nobodyさん02/08/10 23:34ID:BXA7DZha
>>499-501の者です。
おおかたのIP表示のCGIをあさってみたんですが、
IPもしくはホスト取得後、記事部に表示させる記述は

print"$ip $host"
といったものでした。
なぜ、既製品に自分で書き加えると全行、自分のIPもしくはホストが反映されてしまい、
元から機能がついているとちゃんとログから持ってくるかが判別できないのです…
0514 02/08/11 01:21ID:aEO6uXrg
ブラウザから自分のWebページを書き換えるスクリプトを書いているんですけど、
書き換えるHTMLファイルのパーミッションを666などに設定する必要がありますよね?
これってなにか危険性あります?
0515nobodyさん02/08/11 03:02ID:???
ありすぎ。
書き換える直前でパーミッション変えて、終わったら戻すようにしたらどうだ
051651402/08/11 16:04ID:???
chmodでファイルのパーミッション変更しようとしたら、
Internal Server Errorが出てしまいました。
CGIによるパーミッション変更は禁止されているようです。
あきらめるしかないんでしょうか。
0517nobodyさん02/08/11 22:13ID:???
666でもかまわんだろ、
KENTWEBでもそういうのあるし
0518困ったチャン02/08/12 17:49ID:???
ユーザーIDと
パスワードを入力して
認証してOKならページ移動
の処理を作成中なんッスけど
認証のためのデータをあるファイルから
参照してハッシュを使ってIDをキーにして
パスワードをデータにして、
IDを比較するのはOKなんッスけど、
パスワードの比較はどうしたらイイんでしょうか?
ようはキーの中身の比較っすね
0519困ったチャン02/08/12 17:57ID:???
ageて逝きまっしょい
0520nobodyさん02/08/12 18:26ID:???
マルチか。                  
0521nobodyさん02/08/12 19:19ID:???
>>519には答えなくていいよ
0522nobodyさん02/08/12 21:14ID:???
apacheでperlのテストを行なっているとerror.logにエラー内容がどんどん
書きこまれていくのですが、どうも中身の行数が増えすぎて見にくくなって
きてしまいました。どうやったらこれをクリアできるのでしょうか?
0523nobodyさん02/08/12 21:16ID:???
ファイル消せば?
0524Disca ◆NAfP6znE 02/08/12 21:38ID:yGKNwrot
C言語で掲示板作ってますが、とりあえず、Windows環境でのCコンパイラ
(VisualC++のコンパイラ)
と、HTTPデーモンには、AnHTTPDを利用して
実行させているのですが、

標準出力の終了を、HTTPDデーモン(AnHttpd)
が認識してくれなく、ある時間が経つと、デーモン側(AnHttpd)からプロセスを強制終了させてしまいます。
TerminateThread() (WindowsAPIで言うと、

putc(EOF);
などをしても、EOFマーカーを認識してくれません。

何か良い方法で、掲示板側から、終了をしたと言う事をHTTPデーモン(AnHttpd)にわかるようにはできないでしょうか。
0525Disca ◆NAfP6znE 02/08/12 21:40ID:yGKNwrot
>>522
httpd.conf をよくみると、どこかにログファイルを書き込むための
ディレクティブが宣言されていたと思うよ。
0526 02/08/13 00:05ID:???
CokkieがOffだったら指定のページに飛ばす
…そんなcgiってありますか?
もしあったら、参考になるサイト、もしくはプログラムを
お教え下さい。
0527nobodyさん02/08/13 00:08ID:???
Cokkie ってなに?
0528nobodyさん02/08/13 00:08ID:???
マルチか。
0529 02/08/13 02:21ID:???
-d でファイルがディレクトリかどうかをチェックしたいのですが、ディレクトリを渡しても値が1にならない場合があります。
調べる場所が'.'の場合はちゃんと1になるんですけど、./aaaとかの場合はダメです。
原因がわかる方、教えてください。
0530 02/08/13 02:26ID:???
補足です。他のファイルタイプ演算子、-fとかもダメです。
0531nobodyさん02/08/13 02:36ID:???
>>529
ソース見せてよ。
0532 02/08/13 02:42ID:???
こんな感じです。
$_[0]には、ディレクトリの場所'.'とか./directory とかを受け取ります。

sub search_dir{
if ($_[0] =~ /\.\./){
$forbidden = 1;
}
else {
opendir(DIRECTORY, $_[0]) or die "カレントディレクトリを開けません。";
@dir_contents = readdir(DIRECTORY);
closedir DIRECTORY;
foreach $con (@dir_contents){
if ($_[0] != '.'){ $con = $_[0] . $con; }
if ($con eq "."){
} elsif ($con eq ".."){
} elsif (-d $con){
$child_dir[$cd_index] = "./" . $con;
$cd_index++;
} elsif ($con =~ /(.html|.htm)$/) {
$child_html[$ch_index] = $con;
$ch_index++;
} else {
$child_otherfile[$co_index] = $con;
$co_index++;
}
}
}
}

053353202/08/13 02:46ID:???
タブ無効なんですね。申し訳ないです。

sub search_dir{
if ($_[0] =~ /\.\./){
$forbidden = 1;
}
else {
opendir(DIRECTORY, $_[0]) or die "カレントディレクトリを開けません。";
@dir_contents = readdir(DIRECTORY);
closedir DIRECTORY;
foreach $con (@dir_contents){
if ($_[0] != '.'){ $con = $_[0] . $con; }
if ($con eq "."){
} elsif ($con eq ".."){
} elsif (-d $con){
$child_dir[$cd_index] = "./" . $con;
$cd_index++;
} elsif ($con =~ /(.html|.htm)$/) {
$child_html[$ch_index] = $con;
$ch_index++;
} else {
$child_otherfile[$co_index] = $con;
$co_index++;
}
}
}
}
053453202/08/13 02:51ID:???
がくっ。板汚しすみません。
■ このスレッドは過去ログ倉庫に格納されています