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 あたりに
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:???0545nobodyさん
03/11/23 12:53ID:???#!/usr/bin/perl\r <-こんな感じ。perl\rってコマンド作ってやるか、
#!/usr/bin/perl --\r みたいに、 オプションをつけることでCRLFでも動作する
つまり、改行コードはCGI動作の本質的な問題ではない
0546542
03/11/23 13:02ID:???となると、
#! /usr/bin/perl --
ってやっとけば、別にShift_JIS+CRLFでも無問題か。。
配布CGI作るときに、メモ帳でもいじれるようにできそうだね。
0547_
03/11/25 05:32ID:???状況が分かりやすいようにサンプルソースを書いてみました。
<form name="f" method="POST" action="xx.cgi">
<input type="text" name="t1">
<input type="button" name="b1" value="【push】" onClick="f1()">
</form>
<script language="javascript">
function f1(){
document.f.t1.value = "1";
document.f.submit();
}
</script>
上記のコードは【push】ボタンを押した際、t1フィールドの値に"1"がセット
されて、xx.cgiにPOSTされるものです。
Win環境ではしっかりt1の値に"1"がセットされたものが渡るのですが、
Mac環境だとなぜかt1の値がnullになってしまいます。
手動で入力した時は問題なく渡るようなのですが・・・
ちなみにMACの動作環境はOSX、IE6です。
これはMACの仕様なのでしょうか?
期待通りにデータを渡す方法がありませんでしょうか?
もしどなたかご存知の方がいましたらご教授ください。
よろしくお願いします。
0549nobodyさん
03/11/25 06:59ID:???http://pc2.2ch.net/test/read.cgi/php/1012750353/301
0550ぱくちゃん
03/11/25 17:12ID:UdoS9gNtビープ音を鳴らしたいんですけど、どなたか方法を知りませんでしょうか?
0551ぱくちゃん
03/11/25 17:14ID:UdoS9gNt0552nobodyさん
03/11/25 17:21ID:???Perl の話は Perl スレへ。
http://pc2.2ch.net/test/read.cgi/php/1066286828/
http://search.cpan.org/~giulienk/Audio-Beep-0.10/
0553nobodyさん
03/11/25 19:21ID:UeVyDd4ahttp://2chp.net/
http://2chp.net/
http://2chp.net/
http://2chp.net/
http://2chp.net/
http://2chp.net/
http://2chp.net/
http://2chp.net/
0554あらスィー
03/11/25 20:15ID:???0555nobodyさん
03/11/26 11:04ID:???Windowsでcgiファイル作ってUnix(Linux)サーバにアップするとき、
FTPソフトによっては、勝手にCRLF->LFに変換してくれる場合があるよ。
0556ぱくちゃん
03/11/26 15:50ID:+ZoCfoLgを鳴らそうと思ったのですが、うまく行きません。どうしたらよろしいでしょうか?
0558ぱくちゃん
03/11/26 16:37ID:+ZoCfoLg「・」が表示され、音はならない状況ですが…
0559ぱくちゃん
03/11/26 16:41ID:+ZoCfoLgいます。「・」が表示され、音はならないようですが...
0560nobodyさん
03/11/26 22:02ID:???ほら、たとえばCRLFを表示しても改行しないでしょ。それと同じで。
0561nobodyさん
03/11/26 22:49ID:???0562nobodyさん
03/11/27 00:33ID:???0563nobodyさん
03/11/27 09:12ID:???0564nobodyさん
03/11/27 10:34ID:???としても鳴らないね(win xp pro)
perl -e "print \"\n\""
だと改行されんだけど。
0566nobodyさん
03/11/27 12:21ID:???コマンドプロンプトでだけど
0567ぱくちゃん
03/11/27 14:01ID:qZERqfQcXP、95どちらでもできました。あと、ビープ音をならすプログラムをC
で作成し、これをexecコマンドでCGIから呼び出しましたけれど、
音は出ませんでした。
ブラウザはIEVer5とOperaでやってみました。ブラウザが鳴らしていな
いのでしょうか?なにか設定があるのでしょうか?
0568nobodyさん
03/11/27 14:08ID:???全部本人か知らないが、マルチで書きまくってたから
教えてはやれないがな
0569nobodyさん
03/12/02 17:48ID:???イメージとしては、
<a href="hoge.cgi#here">アンカー</a>
みたいな。
0573nobodyさん
04/01/11 13:15ID:upkQsXWIすみません、どなたかわかる方いますでしょうか?
CGI.pm を使ったフォーム送信(ファイルアップロード付き)→DB登録
の処理をするCGIを、SSLをかけたサーバで動作させてます。
フォーム送信する要素数(inputタグ)が少ないうちは問題なく登録できますが、
要素数が多くなる(20個くらい)につれて、以下の2つの症状が出る確立が増えます。
(確立があがるだけなので、要素数が多くても問題なく登録できる場合もあります)
(1) フォーム送信後、読み込み中のまま応答しなくなる。
→数分後、IEデフォルトの「ページを表示できません」が表示される(IEで見た場合)
(print STDERR でデバッグしたところ、決まって my $query = new CGI; の部分で止まる)
※読み込み中に、ブラウザの中止ボタンを押すと、my $query = new CGI; から先に進みます。
(2) フォーム送信後、CGIの処理に行く前に、「ページを表示できません」が表示される。
再現できるバグならまだいいのですが、上手くいくときといかないときがあるのが辛いです。
CGI.pmのバグかと思い、最新の3.01にバージョンアップしましたが変わりませんでした。
ちなみに実行環境は以下の通りです。
OS: Kondara Linux 2.4.18
WWW: Apache/1.3.29 mod_ssl/2.8.16 OpenSSL/0.9.7c
Perl: ver 5.6.1
CGI.pm: ver 3.01
0574nobodyさん
04/01/11 14:24ID:Ua0H5zjqmod_perlで動かすCGIの拡張子って皆さんどう付けています?
べつに拡張子区別したりしないですか?
0575nobodyさん
04/01/11 14:57ID:???0576nobodyさん
04/01/11 15:04ID:Ua0H5zjqあは。そうっすね(笑)
Apache::Registryで動かすファイルのことです。
0577nobodyさん
04/01/11 22:42ID:???ScriptAliasで同じディレクトリ内をべつのアドレスに変えるだけさ
0578nobodyさん
04/01/15 16:35ID:WbVNIjHLhttp://www.hoge.fuga/index.cgi?1234
と認識させることできる?
0580パソコン使用中@さわらないでね
04/01/15 19:44ID:gKp4Nezk携帯でやりたいんだけど
そうゆうCGIってある?
0583nobodyさん
04/01/23 11:09ID:???<!--b_start-->bbbbb<!--b_finish-->
<!--a_start-->aaaaa<!--a_finish-->
<!--b_start-->bbbbb<!--b_finish-->
ってかかれてるHTMLがあって
CGIで、flagが1だったら<!--b_start-->〜<!--b_finish-->までを隠して
<!--a_start-->〜<!--a_finish-->を表示。flagが0の場合はbを表示してaを非表示をしたいです。
パターンマッチで置換するのはなんとなくわかるのですけど、
具体的にどうすればいいのかがサパーリです。
すみませんがご教授願います。
0584583
04/01/23 11:51ID:???$html =~ s/<!--b_start-->.*?<!--b_finish-->//sg if ( $flag );
すいませんいけました。
■ このスレッドは過去ログ倉庫に格納されています