CGI: Common Gateway Interface part 11
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/14 22:26ID:F9qlqHNx※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 あたりに
0397nobodyさん
03/08/20 23:22ID:???つか、今流通してるブラウザで、
<input type=checkbox name="SHUMI" value="PC">パソコン
<input type=checkbox name="SHUMI" value="SP">スポーツ
<input type=checkbox name="SHUMI" value="RD">読書
に対応してないブラウザってあるの?
平気な顔して使ってるんですが・・・
0398nobodyさん
03/08/22 00:19ID:???まさか……大丈夫だよな。
0399nobodyさん
03/08/22 00:46ID:???もう駄目だろうな。
0400nobodyさん
03/08/28 15:42ID:ER3uJlrJでは、
●クッキーを発行したあと、
●Location:ヘッダで www.hoge.com/bar.cgi にとばす
の処理をしてます。
で、質問です。
www.hoge.com/bar.cgi の中の処理で、ついさっき発行されたクッキーを読もうとしたとき、
クッキーは読み込めるのでしょうか?
環境依存なのでしょうか?
0401nobodyさん
03/08/28 17:18ID:???0402400
03/08/28 18:26ID:ER3uJlrJあ、ごめんなさい。
「クッキーに対応して、有効にしているブラウザ」の中でを条件に加えてください。
0404nobodyさん
03/08/28 22:09ID:???試したの?
0405nobodyさん
03/08/29 01:22ID:???www.hoge.com/foo.cgi
The page cannot be found
The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.
--------------------------------------------------------------------------------
Please try the following:
If you typed the page address in the Address bar, make sure that it is spelled correctly.
Open the home page, and then look for links to the information you want.
Click the Back button to try another link.
HTTP 404 - File not found
Internet Information Services
--------------------------------------------------------------------------------
Technical Information (for support personnel)
More information:
Microsoft Support
0406nobodyさん
03/08/30 08:37ID:???0407nobodyさん
03/08/31 00:28ID:???use CGI;
my $q = CGI->new;
my $file = '/hoge/hoge.jpg';
binmode(STDOUT);
$| = 1;
print $q->header(-type=>'image/jpeg');
open ( IN, $file );
binmode ( IN );
while ( <IN> ) {
print STDOUT;
}
close ( IN );
close ( STDOUT );
これで普通は動くよな?
0408nobodyさん
03/08/31 00:30ID:???0409nobodyさん
03/08/31 01:56ID:???パスは間違いない?
my $file = './hoge/hoge.jpg'; なら表示されたけど
0410nobodyさん
03/08/31 01:58ID:???こんな場所に画像ファイルを置いてるのか?
ビックリだ。
0411407
03/08/31 02:02ID:???こんなことも言い忘れるとはよほど慌てていたようです。
>>409
パスは絶対指定しています。なので、この形式でいいかと。
>>410
ああ、これはサンプルのパスです。正しいのをさらすと、ユーザー名とかがわかってしまうので。
えーと。なんでだめなんだろう。
0413nobodyさん
03/08/31 02:36ID:???0414nobodyさん
03/08/31 03:05ID:???0415nobodyさん
03/08/31 03:07ID:???openのエラー処理してねーし。
0416407
03/08/31 21:59ID:???ビンゴでした。吐いたらうまく表示してくれました。
ありがとうございました。
>>413
今後は注意します。ありがとうございました。
>>415
ご助言ありがとうございます。エラートラップもつけました。
>>414
毛ジラミでしたら、早急に医者に行った方が・・・
0417nobodyさん
03/09/01 10:36ID:???>cookie
0418nobodyさん
03/09/02 00:31ID:tJK7g1eGBサーバにそれをcsvのデータとして置きたいと思います。
これを実現するにはどうすればいいのでしょうか?
というか、ふつうどうするもんなんでしょうか?
●Aサーバにあるcgiから、(ソケット通信で)FTPかSSHでBにログインして、csvファイルをはき出す。
●Bサーバにもcgiを設け、そこで、AサーバからBサーバを(ソケット通信で)httpで呼び出して、
Bサーバのcgiがcsvをはき出す
くらいしか思いつかないのですが・・・
あと、Aサーバがhttpsで、Bサーバがhttpの場合、このやりかただとデータは暗号化されますか?
0419nobodyさん
03/09/02 00:38ID:???csvがそのうちxmlになる可能性も考えるとhttp経由がいいかもね
暗号化はあくまでもサーバがhttpsの場合だけ
(クライアントもhttps知っている必要はあるが)
だからBがAを呼び出す状況で無いと暗号化はされません
0420nobodyさん
03/09/02 01:01ID:hJ9owds6当然のようにHな事態に発展していくのですがいやーリアルリアル。
オマンコからダラダラ流れ出るマン汁、青筋の浮き出たチンチン。
現実ではあり得ないシチュエーションにリアルさがある秀作!
エロアニメがいっぱい。セーラー服美少女実写版も大好評。
今すぐ無料ムービーを!!
http://66.40.59.76/index.html
0421nobodyさん
03/09/16 00:39ID:???処理中に適当にタイムスタンプでも使ってファイル作って
ソレが存在してる間は処理中と判定させるとか。
で自信でも別スクリプトでも良いから適当にそのファイル名を送って
ソレを一定時間毎に読んで、消えたら完了のページ開くみたいな。
hoge.cgi
処理開始→判定用一時ファイル作成→Locationで飛ばす→処理終了→ファイル消す→exit()
huga.cgi?filename
クエリ読む→ファイルがあるかどうか調べる→あったらLocation略→なかったら終了した事を知らせてexit()
hoge.cgiがタイムアウト等で一時ファイルを消せなかった時の為に有り得ない程時間掛かってたらさくっと消す
素人考えだけど駄目かなー。
0422nobodyさん
03/09/16 16:37ID:???一番汎用的な方法ってなんでしょう?
(ちなみに言語はPerlですが、それは本質的なことではないですよね?)
SSL_PROTOCOL環境変数が空か否かで判断するのかな、と思ったのですが、
どうするのがベストでしょうか?
0425nobodyさん
03/09/17 20:33ID:???同じ動作をするcgiが、全く同じ条件でpostメソッドでcgiにアクセスしても、
Internal Server Errorがでるときと正常動作するときがあります。
Internal Server Errorがでても、リロードすると、正常動作してしまうので、
不可思議なのですが・・・。
これは、どんな原因が考えられるのでしょうか?
0426nobodyさん
03/09/18 04:23ID:???(ちなみにスクリプト自体の文字コードはEUC)
それを、&jcode::convert(\$in{$key}, "jis");
みたくして、JISに変換して(正確にいうと、変換しようとして)、
それをメール本文(もちろんJIS)中に変数として入れたら、
文字化けする可能性ありますか?
もしあるとしたら、
&jcode::euc2jis(\$in{$key});
と明示的に文字コード変換したら、
文字化けがなおる可能性はありますか?
実は文字化けではまってるものの、
文字化けが再現できなくなってしまっていて・・・。
0428425
03/09/20 03:11ID:???でも、リロードしてら正常動作するもんで、手がかりがつかめません。
同じことをしてるのに、違う結果がでるなんで・・・と。わけわからん状態です。
どっから疑っていけばいいんでしょうか?
0430425
03/09/21 16:58ID:???>タイムアウト
いや、タイムアウトの可能性はないかと。
すぐにInternal Server Errorになったので。。。
>負荷ぎりぎりで動いてるとか
でも、これが可能性高そうです。ちょっと調べてみます。
0431nobodyさん
03/09/21 17:01ID:???ソースを公開するなり、そちらが情報を提供する気がないのならこれ以上質問するなよ。
こういう掲示板はGive&Takeによって成り立っているって理解している?
0432430
03/09/21 21:55ID:???>ソースの公開は、仕事の都合上、できないので、すみません。
あと、いちお、名無しでですが、Giveはこのスレでも他のスレや板でも、してます。いちお。
0433nobodyさん
03/09/21 23:31ID:???その現象が起きる20行程度のソースを晒せば?
それでも仕事の都合上無理ってんなら>>431の言う通り。会社の人に聞けば?
y=x+1が与えられてyの値はいくつでしょう?と聞かれても誰もわからんのでは?
0435nobodyさん
03/10/17 10:28ID:M5vTMTcpページが正常に表示されず、ファイルのDLを始めようとするようです。
同じサーバーの他のプログラムは正常に表示するようで、吐き出す
ヘッダも同じにしてるはずなんですが。
本来相手の環境を調べるべきなのですが、素人なので聞かれてる内容も
理解できないらしく、上手く情報が伝わって来ません。
なにか考えられる原因、思い当たる方いませんか?
0437nobodyさん
03/10/17 11:26ID:5bzSqekM後は、Webサービスのマッピングをチェックしてみるってのはどうでしょう?
さすがにそれぐらいしか答えようがないですね。
0438nobodyさん
03/10/17 12:05ID:???>>437
まあ、そうですよね。
ただ同じサーバーの他のスクリプトでは問題ないようなのです。
もちろん当方からのアクセスではそのスクリプトも含めて全て正常に表示されます。
なんとも再現しないのでわからないのですが、
状況からすると、ある特定の環境で問題を起こすCGIの記述の可能性、
と予想したのですが。
0441nobodyさん
03/10/17 15:28ID:???あと、アドレス欄の最後のパラメタを拡張子と誤解して
誤動作するブラウザがある
0442nobodyさん
03/10/17 16:40ID:???http://www.hoge.net/huga.cgi
のようにCGIを直接呼ぶ事で単純に表示するルーチンに飛ばしてます。
で、当人が言うにはブラウザから、
「このファイルは開けません。ファイル huga.cgi」とか、
「検索の結果、以下のソフトウェアが見つかりました。
このソフトウェアを利用するとファイルを開くこと
ができます。
ファイルの種類: Common Gateway Interface」
とか言われるらしいのです。
ただ、それもこの特定のCGIだけなんですよね。
wget試してみます。
0443nobodyさん
03/10/17 16:50ID:???Length: unspecified [text/plain]
なんてなってます。
他のCGIは、
Length: unspecified [text/html]
になってるんですが。。。
ヘッダは以下のようにtext/htmlで送出してるはずなんですが。
--
Content-type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
--
0444nobodyさん
03/10/17 17:00ID:???0445435
03/10/17 17:06ID:???で、Content-type: text/html の送出をスクリプトのなるべく前の
方に持ってきたら
Length: unspecified [text/html]
と表示されました。
これで問題ないかアクセスしてみてもらいます。
しかし、これはどういうわけでしょうか?
後学のためどなたかお分かりの方お教え下さい。
0447nobodyさん
03/10/17 17:32ID:???0448435
03/10/17 17:35ID:???検索していませんでした。
検索しましたが、どこにもありませんでした。
実はこのスクリプト、個別の設定情報を書いた複数の違うhoge.cgiから、
共通ライブラリであるcommon.plをrequireする仕様で、
それぞれのhoge.cgiにはユニークな固有の設定情報のみ記述し、
スクリプトのほとんどはcommon.plにあります。
当初送出するヘッダはcommon.plに書いてあったのですが、
Content-type: text/html のみhoge.cgiに持ってきたら
wgetでhtmlが確認できました。
text/plainはhoge.cgiにもcommon.plにもどこにもありませんでした。
0449nobodyさん
03/10/17 21:16ID:???大事な内容をCGIで送信するのにベストな方法ってありまつか?
0450nobodyさん
03/10/17 21:34ID:???何が何だかわからないのでご存知の方いたらご教授願います。
「○○サーチ」というある検索エンジンに自分のサイトを登録しようとしたら、
何度やっても「コマンドが不正です」と出る。
新規登録は動いているからサーチ自体には問題ないようだ。
てことは自分のパソコンに何か原因があるのでしょうか?
0453450
03/10/17 21:59ID:???まだサイトは登録してないから拒否とかはないはず、
登録画面に入るボタンを押すと「コマンド〜」が出たんですよ。
なんなんだほんと。
0455nobodyさん
03/10/18 00:04ID:???だから検索エンジンってのがあるように、
登録しようとした君のサイトを自動的に見に行って
登録するにふさわしくないと拒否られたんだって
0456nobodyさん
03/10/18 04:12ID:???使うだけの人間はここで質問するな。
0457nobodyさん
03/10/18 04:15ID:???どうやらその検索サイトはHTMLの文法をチェックしているみたいですね。
HTML-lintで90点以上取らないとダメみたいです。
0458450
03/10/18 21:13ID:???レスサンキュ。登録あきらめることにしたよ…_| ̄|○
さっきいったらサーチがダウソしていてめんどくなりますた
スレ違いすまんな。さらば!
0459nobodyさん
03/10/18 23:12ID:???ベストっていったら、
(SSLは必ず使うとして・・・)
●メールは、もし流すなら、
ウェブサーバ、送信メールサーバ、それを受信するメールサーバとも、
セキュリティ的に安全なネットワーク内部で完結させること。
とかいいつつ、自分もよく分かってない。
・・・詳しい人フォローきぼんぬ、、、
0460nobodyさん
03/10/19 00:13ID:???0462nobodyさん
03/10/27 00:03ID:???0463nobodyさん
03/10/27 10:59ID:???0464nobodyさん
03/10/27 16:10ID:???0465nobodyさん
03/10/27 20:46ID:???0466nobodyさん
03/10/29 12:37ID:aayFZnQswindowsでは\r\nContent-Type:となっているけどmacだと\rContent-Type:ってなるんですか?
0467nobodyさん
03/10/29 12:41ID:???仕様上は改行コードに依存せず
常に\r\nじゃないといけなかったかな?忘れた
0468nobodyさん
03/10/29 12:52ID:???0469nobodyさん
03/10/30 17:06ID:???CGIで、設置ユーザのドキュメントルートを絶対パスで取得することってできますか?
例えば、test というユーザが、
http://server/~test/cgi-bin/test.cgi
という名前でCGIをアップしたときに、test.cgi で
http://server/~test/
と同じ場所の絶対パス(ex: /home/test/public_html )を取得したいのです。
設置ユーザがサイトの管理者であれば、
$ENV{'DOCUMENT_ROOT'} で、
/var/www/html なんかが取れるんですが、
ユーザ毎にサイトを作れる設定にした場合、
$ENV{'DOCUMENT_ROOT'} では取れませんよね…
0470nobodyさん
03/10/30 19:58ID:???$path = 'http://' . $ENV{'HTTP_HOST'} . $1;
}else{
$path = 'http://' . $ENV{'HTTP_HOST'} . '/';
}
こんなところかな?
スマートではないけど。
tu-ka,Perlの話はPerlスレ逝け。
0471nobodyさん
03/10/30 20:47ID:???スマン。
取得したいのは絶対パスの方っす。
/home/test/public_html ね。
説明がわかりにくかったかも
一応 %ENV 絡むんで CGIスレで妥当かと思いマスタ
0472nobodyさん
03/10/31 01:12ID:???_,..,_ ノ´//⌒ ミヾヽ、_
_____ ,r'´ ``'' - 、ーニ三彡´〃 ! ゙ゞヾ、_`ヽ
[|<|____├{ /´ { l | // ヽ`ーr' }
″ ! `、 ' ノ l. ||l i l / l ああっ、つ、つらいです...
', | ̄``''''ー―- ,'´l l |!` ‐--| l l l
', | l l | リ,! l
', | | | ,! ' リ
,.r''ヽ、 _ ', | |. |
,' ` ' ' ' ' ' ' ´ `ヽ ! | |
/ ,.r'´ ̄ '''''' ─−-........__ ,.r' | '''"''‐-、
~´  ̄ ̄ ̄
0474nobodyさん
03/10/31 06:04ID:???そんなのとって何するんだ?
0475nobodyさん
03/10/31 11:40ID:???目的としては、
http://server/~user/cgi-bin/query.cgi?file=/index.html
のようなクエリーで、
/home/user/public_html/index.html
のファイルを取得したいって感じかな?
単純にperlに /index.html を渡すと、
本当にルートからの /index.html になってしまうので、
それをどうにかしようと /home/user/public_html を調べて
/home/user/public_html/index.html としたいってことでつ…
0476nobodyさん
03/10/31 13:30ID:???こんなのでできないか?
$path = $ENV{'SCRIPT_FILENAME'};
$path =~ s/$ENV{'SCRIPT_NAME'}//;
あとは$pathにクエリーストリングのファイル名をくっつけてやれば
0478nobodyさん
03/10/31 23:37ID:NZRYtOAF0480nobodyさん
03/11/01 02:11ID:???0481nobodyさん
03/11/01 03:03ID:???あぁ、欲しいのはユーザディレクトリなのね。
「ドキュメントルートを絶対パスで」しか見てなかったよ。
なら、プログラム内や設定ファイルで陽に指定するしか
確実な方法は無いだろうね。 cgi-bin ディレクトリと
ユーザのドキュメントルートの位置関係は設定次第で
いくらでも変わるからね。
cgi-bin ディレクトリがユーザのドキュメントルートの下に
存在するなら >>476 でOK。
0482475
03/11/01 10:32ID:???そうっす。ユーザディレクトリ。
やっぱりCGIスクリプト内に直書きするしかないかな…
一応配布CGIとして考えてるんだけど、
CGIをDLするユーザって、
その鯖内の自分のユーザディレクトリパスなんて知らんしね。
下手すりゃ file=/etc/passwd とかってやられそうだ(ガクガクブルブル
(↑これを /home/user/public_html/etc/passwd にできればええんやけど)
0484nobodyさん
03/11/01 18:41ID:???それに関して詳しく書いてあるサイトなどはありませんでしょうか?
googleなどで探してみたのですが、検索ワードが悪いのかいいサイトが見つかりませんでした。
対策なども含めてかかれているサイトがありましたら、どなたかお教えください。
0485nobodyさん
03/11/01 19:33ID:???ISO-8859-1 なら %A0 は no-break space ( ) なので
どっちゃでもいい気もするが。
情報を小出しにせず再現できる条件を全部書いてくれんか。
0486nobodyさん
03/11/02 00:02ID:???レスありがとうございます。
再現条件は自分ではよくわからないのです。
自分の投稿では普通に%20になっているようで、誰がどの状況になった時に
%A0になるかがはっきりとわからないので。
条件絞りきる力がなく申し訳ありません。
%A0についてですが、どっちゃでもいいとおっしゃられますが、我が家のマシンで
%A0の文字をブラウザで見ると半角の「・」みたいに表示されます。
気にしなければ気にならないのかもしれませんが、できれば解決したいと思っていまして。
Perlの正規表現で置き換えようともしたのですが、%A0は「あ」の2バイト目であったりと
なかなか上手くいきません。
それで資料を探していたのです。
0487nobodyさん
03/11/02 02:10ID:???だからぁ、小出しにしないでって言ってるでしょ。(w
「あ」の 2 byte 目が %A0 なのは Shift_JIS 。
Shift_JIS では 1 byte 文字としての A0 は未定義だから
(特定の環境では) 半角の「・」みたいに表示される。
言語は Perl らしいし置換で事が済むのならこの辺。
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0488nobodyさん
03/11/02 12:11ID:???・環境
Web上のPerlCGIにてデータを取得している。
送信者はどのような環境かわからない。(条件の限定ができない)
フォームから送信された取得はPerlで行なっているが、その後
取得データをCプログラムで処理することもある。
また、今後Perlで送信データの取得を続けるとは限らない。
スクリプトの文字コードはS-Jisで行ない、結果作成もS-Jisで行なっており、
CプログラミングはVCで行なっている(S-Jis以外使えない)ので、文字コードの変更は困難。
送信フォームもMETAタグにてS-Jis指定を行なっている。
データ取得で使うサーバーはRedHat、Cプログラムを走らせるのはWindows。
S-Jisの状態で%A0を%20に置き換えようとすると「あ」などの文字が化けてしまう。
・目的
%A0が送信されない環境が作れればベスト。
もしくは%A0を%20に上手く置き換える手法を知りたい。
正解のみをここで聞くのではなく、できれば自分できちんと理解し、応用できるようにしたい。
思いつくだけの情報を羅列してみました。
他に足りない情報があればご指摘ください。
紹介されたページはこれからじっくりと読んでみようと思います。
ありがとうございます。
0489nobodyさん
03/11/02 12:29ID:???お前自分で何言ってるか分かってる???
Shift-JISなら「あ」=「%82%A0」だから
>%A0を%20に置き換えようとすると「あ」などの文字が化けてしまう。
当たり前
0490nobodyさん
03/11/02 12:31ID:???それはわかっています。
だからこそ、「上手く置き換える手法」を知りたいのです。
0491nobodyさん
03/11/02 12:33ID:???S-Jisの半角スペースである%20に置き換えたいと。
0492nobodyさん
03/11/02 12:48ID:???ってことは
>Macからのフォーム送信だと、半角スペースが%20ではなく%A0になる事があるのですが、
これは本当のことなのか?
てっきりShift-JISの文字列見て%A0を空白と勘違いしただけなんだと思ってた。
先頭から1文字ずつ見ていくしかないだろう。
別の文字コードでどうなるか試してみたら?
0493nobodyさん
03/11/02 13:13ID:???<FORM accept-charset="Shift_JIS">
を試してみるとか。macのブラウザが対応してるのかどうかは知らん。
あるいは
<FORM enctype="multipart/form-data">
で常にバイナリ送信させるとか。
0494nobodyさん
03/11/02 14:21ID:???>492
アクセスログを見たところ、%A0になってしまっていたのはいずれもUAがMac_PowerPCの方でした。
確認できた件数が6件と少ない為に断言はできませんが、Macからの送信で化ける可能性が高いと判断したのですがいかがでしょう?
自分ではMacマシンを所有していないので、正確な調査が行なえず申し訳ありません。
試行錯誤の末、>487のリンク先や、Perlメモの記述を参考に、1文字ずつ見ていくような処理が行なえるようになりました。
これでしばらく様子を見ようかと思います。
別の文字コードで試すというのは、「別文字コードでの送信」という意味でしょうか?
後程、やり方を調べた上で試してみたいと思います。
>493
accept-charasetは知りませんでした。
早速試してみたいと思います。
0495nobodyさん
03/11/02 14:22ID:???ttp://www.att.or.jp/perl/cgi-tech-tips.html
ここに掲載されていた、CGI出力ヘッダでの文字コード指定と.htaccessによるADDType指定も
同時に行なった事を報告させていただきます。
■ このスレッドは過去ログ倉庫に格納されています