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 あたりに
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指定も
同時に行なった事を報告させていただきます。
0497nobodyさん
03/11/02 14:53ID:???自分がこの属性に着目したのは、Operaから文字を投稿するとき
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
と指定していても、送信フォームの内容をShift_JISと判別してくれなかったから。
全部Shift_JISの半角カナで投稿すると、OperaはそれをEUC-JP全角と自動判別して
それをShift_JISに変換してから送信するので、CGI側で受け取った段階で既に文字が化ける。
最初はjcode.plの問題かと思ったけど、jcode.plを外しても同じだったのでほぼ間違いない。
0498nobodyさん
03/11/02 15:33ID:???0499nobodyさん
03/11/02 16:57ID:???0500nobodyさん
03/11/02 22:32ID:???自分で確認できないのは厳しいですね。
後から気付いた事とわかった事を少しだけ載せます。
文字化けした6件ともMacのMSIEだった。(MSIE5.16〜5.22)
一部の人の証言ではS-Jisのページで出ていた文字をコピペしたとの事。(全員がそうであるかは不明)
>497
ご指摘ありがとうございます。
危うく間違えるところでした。
0501nobodyさん
03/11/04 01:41ID:ZhxpP0UW教えてはもらえませんか?
0503501
03/11/04 13:37ID:???CGI::Carp素晴らしいですね。
use CGI::Carp qw(fatalsToBrowser);
とやるだけでdieや文法エラーに対してブラウザに
エラー内容を表示してくれなんて。
CGIの開発がかなり楽になりますね。
しかも標準モジュールなので別途インストールの必要は
ないみたい。今まで知らなかったよ。
本来の機能はHTTPDのログにエラー内容を書き込んでくれる
ということでよろしいですか?
0504nobodyさん
03/11/04 13:45ID:???0505nobodyさん
03/11/04 21:05ID:Ljvqwop4Redirect ^/hoge/abc([0-9]{4})\.html$ http://example.com/index.cgi?a=1&b=$1
で動作させると、
?が%3f &が%26になり、&のところで、ループしているようなURLを吐き出します。
ここで、解決できたのでしょうか?
0506nobodyさん
03/11/04 21:33ID:???Apache 限定の話題は Apache スレへ。
http://pc2.2ch.net/test/read.cgi/php/1043851302/
Redirect (mod_alias) じゃなく Rewrite (mod_rewrite) 使えば可能。
0507nobodyさん
03/11/04 21:56ID:xEdoNAPc0508nobodyさん
03/11/04 22:14ID:???ていうか、そもそも「普通の掲示板」って何だ。2ch型は普通じゃないのか。
0509nobodyさん
03/11/04 22:27ID:???それとも駅構内の掲示板が「普通」なのか
0510nobodyさん
03/11/05 07:59ID:???0511nobodyさん
03/11/05 08:29ID:???0512nobodyさん
03/11/13 01:19ID:???クッキーにログインパスワードを暗号化したものを食わせて、
画面が遷移するたびにその暗号化パスワードと本当のパスワードを認証させるとか。
Apacheのセッション管理モジュールとかは虫で、
Perlだけでできるようなの他にあったらきぼんぬ
0513nobodyさん
03/11/13 08:34ID:???例え暗号化していても、クッキーにパスワードを持たせるべきではない。
ログインしたときにセッションIDを持たせて、それで認証するのがセオリー。
セオリーだから細かい部分は調べれば資料はすぐに見つかるはず。
0514512
03/11/13 13:22ID:???セッションIDを発行して、それをクッキーに持たせてSSL通信にすれば
今のところPerl-CGIでできる最善の方法かもしれないすね。
セッションIDは、普通、発行時刻とプロセス番号をくっつけてcryptするのが主流なんでしょうか?
まあユニークで、盗聴に耐えうるものであればなんでもいいような気がしますが。
で、セッションはサーバー上に生成するファイルで管理すると。。
本当にこれでセキュリティ上安全なのか不安になったのでみんなに聞いてみたまででつ。。
他にこういうことしてるとかあったら教えてくさい
0515nobodyさん
03/11/14 10:39ID:???セッションIDにtimeとプロセスIDでユニークにしつつセッション開始時刻をとって、
セッション開始時に発行したセッションIDのファイル名のファイルを作って、
次にセッションIDでアクセスしたときに、毎回セッションファイルリストをチェックして、
存在すれば、そのセッションの開始時刻を見て、制限時間を切れてたら削除。
問題なければセッション継続。
でよろしいか?
てかこれしか思い浮かばん。
0516nobodyさん
03/11/14 11:12ID:???0517nobodyさん
03/11/14 14:55ID:???0518nobodyさん
03/11/17 14:42ID:WakYOncEさらに次のcgiに同じパラメータを渡す事ってできる?
0519nobodyさん
03/11/17 15:20ID:???0520518
03/11/18 11:25ID:2RvczggN環境はVinelinux2.2+CGI.PM+Perl4です
0522nobodyさん
03/11/18 11:51ID:???0523nobodyさん
03/11/18 14:44ID:???0524518
03/11/18 19:41ID:???POSTで渡す方法はありますか?
0525nobodyさん
03/11/18 19:46ID:???ヘッダのみじゃ不可能なのはわかるよな?
0526518
03/11/18 20:23ID:???二つ目のcgiへの渡し方がわかりません。
GETなら引数に書いてやればいいのですが
0527nobodyさん
03/11/18 20:29ID:???検索とかしてみた?
検索したならどういう単語で検索した?
0529518
03/11/18 20:48ID:???を発見しました。
できればはじめのcgiで作ったフォームから次のcgiに渡したいのですが・・・
Javascriptとかを使わないと無理ですか?
0530http://mokorikomo.2ch.net/
03/11/18 23:19ID:???0531nobodyさん
03/11/19 11:00ID:???その場合、認証成功した人が、HTMLのソースを見ると普通に画像のパスがわかってしまい、
アカウントを持っていない人でも、そのURLを教えてもらえれば見れてしまうのですが、
何かいい考えはありますでしょうか?
0532nobodyさん
03/11/19 11:43ID:???http://httpd.apache.org/docs-2.0/howto/auth.html
http://support.microsoft.com/default.aspx?scid=kb;ja;324276
0533531
03/11/19 11:56ID:???ありがとうございます。
すいません、情報不足でした。
BASIC認証は使わずに、CGIで認証をした人にだけ見せたいです。
遷移としては、
インデックス⇒ログイン⇒画像ページ⇒HTML内で画像表示
BASIC認証でやる場合、ログイン部分に置けば万事解決ですが、
ログインCGIを使用しているため、
ログインアカウントと、画像を表示するアカウントの二つが存在するのは
あまり望ましくないですね。
0534nobodyさん
03/11/19 14:04ID:???cgiに画像を読み込ませてそれを出力すればいいんでないの?
0535nobodyさん
03/11/19 17:10ID:7+Nu5MKS探しているのですが有料ばかり(^^;)
0536nobodyさん
03/11/19 17:32ID:???【CGI】こんなCGI探してますver.1.1【素材】
http://pc2.2ch.net/test/read.cgi/hp/1067286961/
0537nobodyさん
03/11/19 17:33ID:???漏れの案
認証した人だけに見せるページはCGIが吐き出す。
画像のパーミを400とか600にして、直に見ようとしたら403エラーが出るように汁。
これでどうだ。
0538nobodyさん
03/11/19 18:16ID:???CGI プログラム経由で吐くなら、画像ファイルをドキュメントルート
以下に置く必要は全く無い。つか >>534 と結婚。
>>533
ログイン CGI とやらが何をする為のものか分からん上に、サーバ
環境も許されている権限も分からん。BASIC認証が使えん理由も
分からん (ログイン処理を変えられるなら、アカウントを .htpasswd
で一括管理すれば済む話) 。
あと本質的に、アカ持ってる奴が画像キャプチャしてバラ撒いたら
終わりなので、こういう部分に力を入れても労多く益少ない上に
正規ユーザが不便なだけ。
0539nobodyさん
03/11/20 00:05ID:nKwXTSg6perlのデバッガを使用したいのですが、以下のメッセージが出力されており実行できません。対応方法を教えてください。
Can't locate perl5db.pl in @INC (@INC contains: /opt/perl5/lib/5.00502/PA-RISC1.
1 /opt/perl5/lib/5.00502 /opt/perl5/lib/site_perl/5.005/PA-RISC1.1 /opt/perl5/li
b/site_perl/5.005 .).
BEGIN failed--compilation aborted.
[環境]
OS:HP-UX11.0
perlのバージョン:version 5.005_02 built for PA-RISC1.1
[補足事項]
�@本環境ではperl4と5が共存しております。それぞれのパスは以下のとおり
/usr/contrib/bin/perl ・・・ver4
/usr/contrib/Q4/bin/perl ・・・ver5.00502
以上、よろしくお願いします。
0541nobodyさん
03/11/20 05:40ID:EAgQK2Up0542nobodyさん
03/11/23 12:07ID:???改行コードは、UNIX系OSならLF、WindowsならCR+LFに変換してUPする必要があるけど
文字コードは、EUCだろうがSJISだろうが、
ブラウザへの出力、フォームからのクエリーストリングなどが、
スクリプトの文字コードと一致するように注意していれば全然問題ないかと思うんだけど、
この考えって問題ある?
0543nobodyさん
03/11/23 12:28ID:???■ このスレッドは過去ログ倉庫に格納されています