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

CGI: Common Gateway Interface part 11

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/14 22:26ID:F9qlqHNx
CGIの運用に関する質問スレッドです。

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

Perlのコーディングに関する質問は、専用スレでお願いします:
[Perl 初心者コーナー Part24]
http://pc2.2ch.net/test/read.cgi/php/1054992610/

CGIとPerlの区別がわからない、という人はとりあえずこちらへ:
[WebProg 初心者の質問 Part3]
http://pc2.2ch.net/test/read.cgi/php/1045091733/

過去ログ・関連スレッドは >>2-5 あたりに
0224nobodyさん03/08/04 16:46ID:CNOu+lh/
画像アップロード付きCGIでの質問です。

sub form { #(1)
# いろいろなFORMに入力させsubmitさせる。
# <input type="file">もある。
}
sub reconfirm{ #(2)
# 画像込みで仮表示し内容を再確認させてsubmitさせる。
# FORMからのデータは<input type="hidden"〜>で持ち回る。
}
sub data_input{ #(3)
# ユニークなdata_idを決めてデータを格納する
# 画像データはdata_idを元にユニークなファイル名を付けてupload処理(CGI.pmで)を行う。
}

こんな流れの処理です。
※次に続く
022522403/08/04 16:47ID:CNOu+lh/
※続き
元は受け入れデータがテキストのみで画像はなかったので、
これで上手くいっていたのですが、画像アップロード機能を付加した所
(2)を経由させると<input type="hidden"〜>では画像データを持ちまわって来ないので
とりあえず(1)→(3)として運用していますが、やはりこのままだと
ちょっとしたEnterキーの誤入力などでいきなり書き込みされてしまうので
どうしても(2)を介在させたいと思います。
(2)で再編集必要な場合、あるいは画像の選びなおしの場合に(1)に戻るのは
ブラウザの「戻る」ボタンを使わせます。
でもし画像込みで(2)の介在が可能ならば、(2)ではその画像も仮表示させたい、
と思っていますが、これを実現するには

A:(1)→(2)の段階でテンポラリーファイルにupload処理上で仮表示させ、
  (3)で正式なファイル名称にrenameする。

あるいは
B:(1)→(2)では画像ファイルを変数に格納した上で仮表示し、
  (3)で正式なファイル名称にした上、ディスクに格納する。

どんなふうにするのが当たり前、現実的でしょうか。
画像ファイルはJPEG又はGIFで二点ほどで、
$ENV{CONTENT_LENGTH}は200kで制限かけてます。
僕としては仮表示(正式にuploadするかどうかわからない)時点で
ディスクに書き込むよりはできれば変数に仮に格納するBにしたいのですが、
その方法がよくわかりません。
そもそも可能でしょうか。
022622403/08/04 16:49ID:CNOu+lh/
あ、言語はperlです。
0227nobodyさん03/08/04 17:17ID:???
>>226
Perl のみでは不可能。
削除できるんなら別にいらない機能かと思われ。
(ようするに誤送信する香具師が悪い)

あとなんでもいぃからアップローダのスクリプトを眺めて処理の流れを嫁。
022822403/08/04 17:44ID:CNOu+lh/
>>227
ども、ありがとうございます。
そうですか、perlだけではだめですか…

アップロード処理自体は問題なくできてます。
つまりFORMで受け取ってそれをディスクに格納、はできてます。
そのあいだに再確認の手順を挟みこめないかな、と、

で、その再確認で送ろうとする画像も表示したい。
とはいえもちろんまだローカルにしかないファイルを表示はできませんから、
この時点でサーバが受け取ってなくては無理なわけですが、
できればそれをテンポラリーであれディスクに書き込まないで
できないかな、と思った次第です。

やっぱりこの機能をあきらめるか、あるいはこの時点でとりあえず仮であれ
なんであれディスクに書き込む必要がある、って事ですね。
0229nobodyさん03/08/04 17:47ID:???
すいません、教えてください。
メールの添付ファイルをperlを使ってbase64デコードすると、
32KBのところで切れてしまいます。
perlのソースは下記の通りです。

# ===================================================================
# mime_dec_base64 … base64デコード
# Usage : &mime_dec_base64( $input )
# 引数 : 被デコードデータ
# 戻り値 : デコード済バイナリ
# 外部参照: なし
# ===================================================================
sub mime_dec_base64 {
$_ = @_[0];

# --- 非base64キャラクターと'='を除去
tr!A-Za-z0-9+/!!cd;

# --- 底を変換する
tr!A-Za-z0-9+/!\x00-\x3f!;

# --- 6ビット揃えして、戻す
$_ = unpack('B*', $_);
s/(..)(......)/$2/g;
s/((........)*)(.*)/$1/;
$_ = pack('B*', $_);

return( $_ );
}

よろしくお願いします。
0230nobodyさん03/08/04 18:24ID:???
>>227
なんか、勘違いしてるな(藁
023122903/08/04 20:18ID:???
すいません、自己レスです。
もともとbase64エンコードって、サイズの限界が32KBなんですね。
・・・ってことで、添付ファイルを分割後エンコード→結合って方法で
解決しました。
023222403/08/04 20:47ID:CNOu+lh/
画像表示したい所に、
while ( read( $fh, $buffer, $baffer_size) ) {
print "$buffer";
}
ってやったら文字化けずらずら出てきました。
なんか実現に近づいているような期待しているんですが、
勘違いですか?
0233nobodyさん03/08/04 20:52ID:???
それ、画像ファイルじゃねーの?
試しにその内容を .jpg とか .gif ファイルに保存して見れば?
023422403/08/04 20:54ID:CNOu+lh/
>>233
はい、画像ファイルです。JPEGです。
でファイルに保存したら見られます。

やりたいのはファイルに保存しないでHTMLファイルの
一部として表示しちゃいたいんです。
できませんでしょうか。
0235nobodyさん03/08/04 21:23ID:???
>>234
htmlでの画像表示法知ってるかい
urlでファイル名を指定するんだよ。
023622403/08/04 21:34ID:CNOu+lh/
>>235
GDとか使うとメモリ内のデータを画像として表示しますよね。
その辺の応用でできないもんかな、とか思って。

いろいろやってみてるんですが上手く行かないですけど。
0237235じゃないが・・・03/08/04 21:43ID:???
>>236
>GDとか使うとメモリ内のデータを画像として表示しますよね。
htmlでの画像表示法知ってるかい
urlでファイル名を指定するんだよ。
0238nobodyさん03/08/04 21:50ID:???
画像データをファイルに保存して、出力する html に <IMG src="..."> でいいんでは?
023922403/08/04 21:54ID:CNOu+lh/
>>237
はい、知ってます。
今はそれでやってますから。
FORMから受け取ったものをディスクに格納し、
表示はそのファイルを<IMG src="..."> で表示させてます。

で、FORMから受け取ったものをディスクに格納する前に、
表示する方法がないかな、といろいろやってみているわけで、
無駄な努力をしちょる、という事なんでしょうね、
きっと。
0240nobodyさん03/08/04 22:02ID:???
>>239
multipart/mixed なんてものもあるが、まともに実装されている
ブラウザが存在するのか疑問。素直に一旦ファイルに吐く方が
いいと思う。
0241nobodyさん03/08/04 22:02ID:???
>>236
>GDとか使うとメモリ内のデータを画像として表示しますよね。
表示するのは画像のみだけどね。
htmlで表示するには結局ファイルに保存しないとだめでしょ。
formで受け取ったjpeg画像もContent-type:image/jpegヘッダーの後に出力すれば
画像のみなら表示できる。
024222403/08/04 22:05ID:???
わかりました。

reconfirm で一旦テンポラリーファイルに保存→表示
data_input でrenameして正式格納、って事で進めます。

ありがとうございました。
0243nobodyさん03/08/04 22:41ID:???
>>224
binmode()したらいいんじゃないの?
024422403/08/04 23:11ID:???
>>243
それも試しましたがだめでした。
画像の生データをHTMLの途中に流し込んで、って言うのが
無理なんでしょうね。
0245nobodyさん03/08/04 23:18ID:???
>>244
>画像の生データをHTMLの途中に流し込んで、って言うのが
無茶もいいところ。
GDだって「HTMLの途中に流し込」むなんてできんだろ。
というかHTMLを0から勉強した方がよさげ。
0246nobodyさん03/08/04 23:20ID:???
訂正
>というかHTMLを0から勉強した方がよさげ。
というかHTMLとHTTPを0から勉強した方がよさげ。
024722403/08/04 23:50ID:???
>>246
画像吐き出すスクリプトを別にするなり再帰なり、何しろ別のプロセス
から吐き出して<IMG src=""〜>で呼ぶってのならできるんでしょうが、
まあ、言われなくてもいろいろ勉強中ですわ。

ほんじゃ
0248nobodyさん03/08/05 00:56ID:???
急に態度が悪くなったな
0249nobodyさん03/08/05 01:08ID:???
どうもポン7のようだ
0250nobodyさん03/08/05 01:18ID:???
何!ポン7だったのか。
JavaScriptでローカルファイルを表示させる方法もあるのだが
教えるのは辞めておこう。
0251nobodyさん03/08/05 01:26ID:???
コイツの言っている事は、テキストファイル中に実行可能ファイルの
バイナリ埋めこんでそれを実行しようとしているようなもんだな
025222403/08/05 02:03ID:???
>>245
GDができないんじゃなくて、HTMLをそうできないようにしてるから
できなんだと思います。
GDの出力をWEBページの一部として表示することは、
ホントにできませんか?
>>248
いえいえ、お相手ありがとうございました。
>>249
そうよばれたのは初めてです。ちゅうか、その方とは違うと思います。
>>250
いや、どうも伝わってないようですが、ローカルファイルを表示
したいわけじゃないんです。
>>251
いえ、テキストファイルじゃなくて画像ファイルって言ってるんですが、
どうも誤解させたようで、申し訳ありませんでした。

皆様に幸あれ。
0253nobodyさん03/08/05 02:31ID:???
>>252
ちゃんとレス嫁馬鹿者。

>>251が言ってる
>コイツの言っている事は、テキストファイル中に実行可能ファイルの
>バイナリ埋めこんでそれを実行しようとしているようなもんだな
は合ってるだろ。

>いえ、テキストファイルじゃなくて画像ファイルって言ってるんですが、
ほんっっっとに馬鹿だな。日本語勉強しろ。
お前はHTML(テキストファイル)の中に画像(バイナリ)を埋め込みたいと言ってる。
そりゃ実行できるわけないだろ。(まあ見えなくは無いが文字化けみたいになるわな)



ついでに
>GDができないんじゃなくて、HTMLをそうできないようにしてるから
>できなんだと思います。
どうすればHTMLにバイナリを埋め込んで表示できるんだ。
>GDの出力をWEBページの一部として表示することは、
>ホントにできませんか?
だから<img src="〜">ならできるっつってんだろ。
その時のresponse headerはContent-Type: text/htmlじゃなくてContent-Type: image/(jpeg|gif|etc.)で
message-bodyはその画像のみだ。

HTMLとHTTPを0から勉強しなおせ。
というか、人の話を聞かないようならプログラムやめろ。マジで。
025422403/08/05 02:56ID:???
>>253
聞いてるってばよ。
ありがとうございました。

余計ですが、あんたの253がいっちゃん、マトモでしたよ。
自慢していいよ。
0255nobodyさん 03/08/05 03:37ID:???
unpackをつかって、uriエンコードなり、\x00なんぞを、該当keyに出力して、packで戻すとかすれば?

ただ、画像サイズがデカくなると、htmlのサイズ自体も脹れ上がるからお薦めはせんし実装しようとも思わんけどな・・・

というか、GDやらしってて、この程度の発想がでてこんのが不思議であるわけだが・・・
0256nobodyさん03/08/05 10:21ID:???
javascriptを使うのが楽な気がするが
0257nobodyさん03/08/05 12:08ID:???
>>254
おまえ、人間やめろ
0258nobodyさん03/08/05 13:34ID:???
なぁなぁ、0から10の中から3つの異なる乱数を求める時って、

while($a eq $b || $a eq $c || $b eq $c){
$a = int rand 10 ;
$b = int rand 10 ;
$c = int rand 10 ;
}

これでいいの?
他になんかスマートな書き方ある?
0259nobodyさん03/08/05 13:46ID:???
質問があるのですが、perlのソケット通信で他のサーバーにあるhtmlを
読み込むことってできるんですか?
0260nobodyさん03/08/05 14:21ID:???
>>258
永久ループになる可能性が 0 ではないので不可。
@seed = (0..10);
($a,$b,$c) = (splice(@seed,rand($#seed),1),splice(@seed,rand($#seed),1),splice(@seed,rand($#seed),1));
みたいにしてみる。
# ただし同じ数字が連続しない乱数は乱数ではありませんので。

>>259
できまーす。
0261nobodyさん03/08/05 14:23ID:???
>>260
s/rand($#seed)/int(rand($#seed))/g;
スマソ

つーかスレ違いだったか。鬱。。。∧||∧
026225803/08/05 14:42ID:???
>>260
>>261
サンクスコ
そしてスレ違いスマソ
0263nobodyさん03/08/05 16:02ID:???
Perl-CGIで、重い処理をさせるときに、その重い処理の間、
「ただいま処理中です」
と表示させておいて、処理が完了したら別ページに飛ばす
(処理完了が書かれたHTMLを表示する)
というCGIを作りたいと思っているのですが、
どうもうまくいきません。。

バッファのフラッシュを考えたのですが、
最後に別ページを表示するので、ちょっと違うかなと思いました。。

こんなイメージです。

print "Content-Type:text/html\n\n";
print "loading...";
sleep(10); # ここが重い処理と想定
print "Location:$URL\n\n";
exit;

この通りではいかないのはわかっておりますが、
他に方法がないものかと思っております。。。

この処理自体、Perl-CGIではできなかったりしますかね(汗
0264nobodyさん03/08/05 16:47ID:???
>>263HTTP の仕様上、難しいからできないと考えた方がいい
0265nobodyさん03/08/05 16:50ID:???
>>263
httpヘッダーは1回改行のみを送ったら終わりでしょう。
026626303/08/05 17:35ID:???
>>264,265
( ´・ω・`) ありがとう…。
HTTPヘッダの問題ということは、
言語に関わらず無理ということですね・・・。
(ASPで同様のことをやっていたのを見たことがあるのですが、
あれは何か特殊なことだったのでしょうか・・・)
0267nobodyさん03/08/05 17:43ID:???
1. 重い処理をバックグラウンドで実行し、判定用CGIをmeta refreshで定期的に呼び出す。
2. バッファリングをせずに垂れ流し、処理の最後にJavaScriptのdocument.writeでHTML書き直し。
3. 2.のdocument.writeの代わりにlocationで別HTMLにジャンプ。

これぐらいしか思いつかないや
0268nobodyさん03/08/05 17:47ID:???
>>266
$| = 1;
print "Location〜〜〜〜\n\n";
重い処理。

で無理?
0269nobodyさん03/08/05 17:58ID:???
>>263
昔仕事でそんなようなことやってた。
そのときは、まずsubmitされたデータをhiddenなりで埋め込んだ
「ただいま処理中です」ってページを表示、
そのページのonloadでhiddenのデータをsubmitって感じでやってた。

その際、ブラウザがタイムアウトしないように改行か何かを定期的にflushして、
プログラム側(というかhttpd側?)もタイムアウトしないように
XSモジュールでスレッドとイベント作って、指定時間でraise(SIGINT)
みたいなことやってたな。<俺は関与してない


1. 入力画面
   ↓何らかのデータ送信
2. 送信されたデータをhiddenで埋め込んだ「処理中」ページをとりあえず表示
   ↓onloadで本当に処理させるページへsubmit
   ↓サーバで重い処理
   ↓定期的にタイムアウト対策
   ↓処理終了
3. 結果画面

って感じ。
0270nobodyさん03/08/05 18:28ID:???
httpの仕様を全く無視した使い方ですなぁ
0271nobodyさん03/08/05 18:49ID:???
クライアントが求めてるんだからしょうがない。
027226303/08/05 20:11ID:???
みなさま、いろいろとありがとう( ´・ω・`)

BODYタグのonLoad もしくは、
最後にJSでlocation.href変更スクリプトを吐き出しにしたところ、
なんとかそれっぽい感じにはなってきたんですが、
バッファリングされたりされなかったりしちゃいます。。。

#! /usr/bin/perl
$| = 1;
print "Content-Type:text/html; charset=EUC-JP\n\n";
print "<HTML><BODY>";
print "読み込み中";
print "</BODY></HTML>";
sleep(5);
print <<EOF;
<script language="javascript">
document.location.href='http://www.yahoo.co.jp/';
</script>
EOF
exit;

いくときといかないときがあるということは、
バッファリング自体怪しいかなぁ・・・
027326303/08/05 20:36ID:???
telnet だと、正常にsleep後にJSが出てるのでブラウザ問題かもしれないです。。。
027426303/08/05 20:57ID:???
改良を加えてみました。

#! /usr/bin/perl
$| = 1;
print <<HTML_DATA;
Pragma: no-cache
Cache-Control: no-cache
Content-Type:text/html; charset=EUC-JP

<HTML>
<BODY onLoad="document.location.href='index.html';">
読み込み中
</BODY>
</HTML>
HTML_DATA
print( "\n" x 8192 );
sleep(5);
exit;

ただ、WinのNN6.2, IEでは確認とれたのですが、
Macとなると、両方ともダメでした。。。
0275nobodyさん03/08/05 21:06ID:???
いわゆる泥沼ってやつだな。
027626903/08/05 21:30ID:???
>>272
あと「戻る」で戻ってきた場合の処理もされてたかな。
0277初心者03/08/05 22:00ID:rGA945yM
こんばんわ 初心者です。
質問なんですが、自分iswebで無料ホームページを作っているのですが、
cgiについてよくわかりません。
パーミッションを変更してアップロードするだけでいいのですか?
0278nobodyさん03/08/05 22:17ID:???
>>277
まずは勉強しんしゃい。
http://dir.yahoo.co.jp/Computers_and_Internet/Internet/World_Wide_Web/CGI___Common_Gateway_Interface/Guides_and_Tutorials/
0279nobodyさん03/08/06 00:43ID:s3UpSeM9
>>263
フレームは使用禁止ですか?

フレームページに隠しフレームと見えるフレームをつくる
隠しフレームのソースは重い処理をしたいCGIにする。で処理終了したら
リダイレクトするか、winodow.top.location.href = "index.html";を書き出す。
で、見えるではフレームにお待ち下さいの表示をしておく。

これで上手くできないかな??
028027903/08/06 00:44ID:???
ごめん、酔ってるからまともな日本語かけないわ・・
0281nobodyさん03/08/06 01:03ID:pv8vzu63
今日はこれ!
http://homepage3.nifty.com/coco-nut/
0282nobodyさん03/08/06 01:12ID:9HRAagYp
★おまんこナビ登場!!★日本の美しきオマンコ★
http://endou.kir.jp/marimo/link.html
0283nobodyさん03/08/06 01:40ID:???
>>263
単純に「お待ちください」のページから重いCGIを呼び出すのはどう?
ブラウザ依存するかもしれないけど。
0284nobodyさん03/08/06 09:23ID:???
てか、CGIでそんなに重たい処理って何?
10秒も20秒もかかるの
028526303/08/06 10:01ID:???
>>279
フレームは特に使用しても問題ないです。
その方法は結構スマートですね。
ちょっと試してみたいと思います。

>>283
フォームからCGIを呼び出して、
処理中にお待ちくださいを表示するので、
一度Locationで、hiddenを持たせたお待ちくださいHTMLを
表示して、onLoadでSubmitしてもいいかもしれません。
(この辺はブラウザ依存を要調査ですね
 できれば依存を気にしなくてもできるスクリプトが望ましいです。

>>284
通信処理というより、通信経路で時間をとられるといったほうが正しいかもしれません。


みなさん色々と参考になります。
ありがとうございます。
028626303/08/06 10:03ID:???
×通信処理というより、
○重い処理というより、

でした・・・
028726303/08/06 13:23ID:???
フレームにてとりあえず動作確認とれました。

▼index.html
<FRAMESET rows="0,*">
<FRAME src="process.cgi" >
<FRAME src="loading.html">
</FRAMESET>

▼loading.html
<HTML>読み込み中</HTML>

▼process.cgi
print <<HTML_DATA;
<HTML>
<BODY onLoad="window.top.location.href='done.html';">読み込み中</BODY>
</HTML>
HTML_DATA
sleep(10);
exit;

▼done.html
<HTML>読み込み完了</HTML>


この場合、エラー内容を元にページを振り分けたり、
値を引き継いだりでまた問題が出そうですが・・・。
とりあえずこの方法が一番よさそうな気がします。
0288nobodyさん03/08/06 18:52ID:???
www.foo.co.jpが発行したクッキーを、
hoge.foo.co.jp
で取得することはできますか?

ただし、両者は互いに別のサーバ上にあります。

テストしてみろといわれそうですが、
今まだ環境が用意できてないもので・・・
0289nobodyさん03/08/06 22:26ID:???
>>288
できないと思う。てか、できたら危険だべ。
0290nobodyさん03/08/06 23:02ID:???
>>288
レンタル鯖のサブドメインってそんな感じでしょ。
それができてしまうと、他の契約者のクッキーが食べ放題になってしまう。
0291nobodyさん03/08/06 23:53ID:I44XWNV5
>>288
できそうだなあ。
えーと。
クッキーを作る時にそれが有効になるドメインを指定できる。
指定しなければ、作成したドメインがそれになる。
ドメインを自分で指定した場合、>>288のようなことが可能になる。
0292nobodyさん03/08/06 23:56ID:???
なるほど、他ドメインで読ませることを前提としたクッキーってわけね。
0293nobodyさん03/08/07 02:12ID:???
書き込みはいいとして読み込みはどうする気だよ
0294nobodyさん03/08/07 07:41ID:???
>>291(  ^,_ゝ^)プッ
0295nobodyさん03/08/07 07:45ID:???
>>291
指定できるのはホスト名以下のパスの部分だけ。
0296nobodyさん03/08/07 20:10ID:???
>>288
domain=.foo.co.jp;
でクッキーを発行すればwww.foo.co.jpとhoge.foo.co.jpで同じクッキーをやり取りできるはず。
domain属性が廃止されてなければ。

http://wp.netscape.com/newsref/std/cookie_spec.html

>>295
今はそうなったの?
0297nobodyさん03/08/07 21:18ID:???
>domain=.foo.co.jp;
>でクッキーを発行すればwww.foo.co.jpとhoge.foo.co.jpで同じクッキーをやり取りできるはず

これで正解。いったいここは何の板なのかと思ってしまう・・・
0298nobodyさん03/08/08 11:27ID:???
Windows2000-SP3なんですが、

cgiをコマンドラインからでもテストできるようにしようと思って、
変数をデコードする部分を、

    my($method) = $ENV{'REQUEST_METHOD'};
    if ($method eq 'GET') {
        $query = $ENV{'QUERY_STRING'};
    }
    elsif ($method eq 'POST') {
        read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
    }
    #★コマンドラインからのとき
    else{
        $query = $ARGV[0];
    }

にして、
foo.cgi key1=name=1&key2=name=2&key3=name=3&key4=name=4&key5=name=5
とコマンドラインからやってみたのですが、

'key2' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'key3' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'key4' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'key5' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と言われてしまいます。どうすればいいのでしょうか?
0299nobodyさん03/08/08 13:13ID:???
>>298
perl foo.cgi key1=name=1&key2=name=2&key3=name=3&key4=name=4&key5=name=5
は?
0300nobodyさん03/08/08 17:35ID:???
あるcgiにアクセスすると、
「Location:http://www.aaa.com/hoge.cgi\n\n」
として別のサーバにリダイレクトさせ、
そのcgiにアクセスすると、
「Location:http://www.bbb.com/fuga.cgi \n\n」
として別のサーバにリダイレクトさせ、
さらにそのcgiにアクセスさせると、
「Location:http://www.ccc.com/hage.cgi \n\n」
として・・・
というのように複数回リダイレクト(まぁ、多くても3回の予定ですが)することを考えているのですが、
これに関して、何回までという制限はあるのでしょうか?

また、このように複数回リダイレクトするときに、何かしら制限やら注意事項というのはありますか?
(もちろん、無限ループしないようにはします)
0301nobodyさん03/08/08 21:06ID:???
>>300
とりあえず RFC2606 嫁。
0302nobodyさん03/08/09 00:32ID:???
>>298
なんでCGI.pm使わないのかと小一(ry
0303nobodyさん03/08/09 02:11ID:???
>>300
Locationヘッダを解釈するのはクライアント側だから、ブラウザ次第じゃない?

>>298
foo.cgi "key1=name=1&key2=name=2&key3=name=3&key4=name=4&key5=name=5"
0304nobodyさん03/08/09 09:59ID:???
>>302
>>298じゃないがなんでCGI.pmなんとかいう糞ナ物を使わなきゃいけないのかと小(ry
0305nobodyさん03/08/09 11:32ID:???
CGI.pm 使わないとプログラミングできないんだろ(ワンダフルゲラ
0306nobodyさん03/08/10 09:53ID:???
>>304
素人っぽい質問している>>298さんに勧めているので、
自称スーパーハカーの>>304さんには勧めてませんよ。

せっかくですから、>>304-305さんは好きなだけ車輪の再発明に勤しんでください。
0307nobodyさん03/08/10 11:18ID:???
>>306イチイチうるせーよ。半島にカエレ
0308nobodyさん03/08/10 11:50ID:???
307の負け。
お前は帰んなくていいから、デテクンナ
0309nobodyさん03/08/10 12:29ID:???
↑オマエモナ
0310nobodyさん03/08/10 14:17ID:???
↑オマエモナ
0311nobodyさん03/08/10 21:18ID:???
↑オマエモナ↓
0312nobodyさん03/08/11 00:31ID:???
お、俺も!?
0313nobodyさん03/08/11 00:49ID:???
(・∀・)ニヤニヤ
0314nobodyさん03/08/11 09:54ID:???
→オレモナ
0315nobodyさん03/08/11 16:44ID:1GxglH9k
とあるindex.cgi は、
&cookie_regist('foo','fooid!123456',5);#5日間有効な(fooという値の)クッキーをセット
&cookie_read('foo');          #fooという値のクッキーを読み取る
print "Content-type: text/html\n\n";
print qq|\$cookie{'fooid'} is $cookie{'fooid'}|;

で、クッキーを書きこんで読み込んで表示させる簡単なスクリプトなんですが、
(もちろん、cookie_regist と cookie_read 関数は別の所にあります)
IEで、クッキーを全削除して、そのページを表示させると、
1回目はクッキーが表示されず、
リロードすると2回目以降はクッキーが表示されます。

これって、クッキーの仕様なんでしょうか・・・。
(以前に発行されたクッキーは読めるが、
同じhttpアクセス内で発行されたクッキーは、
そのアクセス内では読み取れないという、ことなんでしょうか?)

0316nobodyさん03/08/11 16:53ID:???
>>315
ヘッダが終了しないとクッキーがセットされないんじゃない?
つまり1行目でクッキーを送信してるけど、実際は3行目で\n\nとしてヘッダを
完結させてやるまでクッキーのセットが保留されているのかも。
クッキー読み込みを表示の直前にして再度試してみて。
031731603/08/11 17:02ID:???
書いてから気が付いたけど、クッキーの取得ってCGI実行時点での環境変数を
見てるだけだから、発行して同時に取得はできないのかもしれない。
発行した場合はクッキーを読まずに、その発行したデータをそのまま使うように
すればいいと思う。または$ENV{HTTP_COOKIE}を自分で書き換えちゃうとか。
0318nobodyさん03/08/11 17:34ID:???
>>315
Cookieの読み出しはブラウザからのリクエスト時に送られてくる
Cookieヘッダ(HTTP_COOKIE)から行う。
Cookieの書き出しはサーバからのレスポンス時に送る
Set-Cookieヘッダで行う。

この仕組みを考えれば明白だろう。


Cookie仕様書
ttp://wp.netscape.com/newsref/std/cookie_spec.html

日本語訳
ttp://www.futomi.com/lecture/cookie/specification.html
0319nobodyさん03/08/11 19:33ID:2ChtRC4J
こちらはそれほど大きくはないですけれど
柔らかくて揉み心地のよさそうなオッパイの持ち主です。
上のお口と下のお口をフルに使っての4Pシーンは見所満載!
オマンコの奥深くに突き立てられていくチンチンが気持ちよさそうです。
無料ムービーはここから
http://www.exciteroom.com/
0320_03/08/11 19:44ID:???
http://homepage.mac.com/hiroyuki45/hankaku_b01.html
0321_03/08/11 19:45ID:???
http://homepage.mac.com/hiroyuki45/
0322_03/08/11 19:48ID:???
http://homepage.mac.com/hiroyuki45/hankaku09.html
032331503/08/11 23:16ID:???
>>316-318
なるほど、よく理解しました。
やっぱ、表面的な知識じゃ、こういうときぼろがでるね。

>>318
Cookie仕様書は英文で、なんとか読んでた(でも半分くらいしかわからず)んだけど、
日本語訳があったとはしらなんだ。ありがとうございます。
0324nobodyさん03/08/12 09:39ID:???
すいません、
<a href="foo.cgi?hoge=fuga&hage=tara">リンク</a>
みたいにリンクするとき、
正しい書式は

<a href="foo.cgi?hoge=fuga&hage=tara">リンク</a>

じゃなかったでしたっけ?

ネスケ7.1(Win版)で試したら、前者は思い通りの動作して、
後者は思い通りの動作をしてくれなかったもので
(hoge=fugaをうけとってくれなかった)

なんか自分、他のことと勘違いしてます?

すくなくとも、html中の特殊文字を書くときと、
hiddenフィールド内に書くときは、&で正しいかったかと思いますが・・・
■ このスレッドは過去ログ倉庫に格納されています