トップページ⇒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
0030 02/07/07 17:07ID:???
>>29
ウチではTurboや赤帽でもちゃんとサクサク動いてる。
CGIの問題じゃないだろう。
00312902/07/07 20:18ID:LtK4GFfe
>>30
CGIの問題とは考えてないです。
apache の設定に何かまずいところがあるのではないかと。
うなぎスクリプトとかは体感的に変わらないのですが、アッhan!だけ遅くなってしまいます。
Turboや赤帽でサクサク動かすにはどう設定すればよいですか。
0032nobodyさん02/07/07 22:47ID:???
>>31
>>CGIの問題とは考えてないです。

じ ゃ あ ス レ 違 い だ ろ。
0033nobodyさん02/07/08 00:25ID:R1ZQ7wuX
始めて投稿させていただきます。
今まで他のサーバーでは普通に動いていたCGIを、新しいサーバーに設置したところ
500のサーバーエラーを起こして動きません。
何度もローカルでテストして、実際に数カ所のサーバーではちゃんと動いているのですが・・・。
どなたか原因のおわかりになる方がいらっしゃったら、どうかご教示ください。
よろしくお願いいたします。
0034nobodyさん02/07/08 00:28ID:???
そのサーバーで使えない関数などが使われてる余寒。
0035nobodyさん02/07/08 00:29ID:???
>>33

・パーミッション
・perlパス
・使えない関数(flockとか?)

みてみ
00363302/07/08 00:36ID:R1ZQ7wuX
34さん
ありがとうございます。
特に特別なことはしていないと思うのですけども。
いままでいくつも同じところでサーバー(有料)をレンタルしており、今回もそこに
借りたのですが、今回に限ってまったく動かないのです。
スクリプトを見なおしたりしているのですがまったく見当がつきません。
00373302/07/08 00:39ID:R1ZQ7wuX
35さん、ありがとうございます。
パーミッションもPerlのパスも確認して設定をしており、flockもはずしてあるのですが
動きません。
0038nobodyさん02/07/08 01:12ID:???
>>33
ものはなんだ?
使えない関数はflockだけとは限らんぞ
00393302/07/08 01:20ID:R1ZQ7wuX
簡単なログインをするだけの物と予定表、それと掲示板です。
最初のログインをするスクリプトは、ファイルを参照するためにオープンして
入力されたものと一致したら、予定表なり掲示板に飛ぶというものです。
0040nobodyさん02/07/08 01:27ID:???
`perl path/perl -wc script.cgi`;

これの実行結果を出力させて見てみろ。
00413302/07/08 01:37ID:R1ZQ7wuX
すみません、`perl path/perl -wc script.cgi`;というのは
スクリプトのなかに書くのですか?
0042nobodyさん02/07/08 01:41ID:???
CGIをつくるだけ。

#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print for `perl_path/perl -wc ./script.cgi`;
00433302/07/08 01:56ID:???
42さん、ありがとうございます。
実行してみたのですが、これもサーバーエラーで帰ってきてしまいます。
0044nobodyさん02/07/08 01:57ID:???
じゃ、CGIが動かない設定になってるんだろ。そのへんの確認は?
00453302/07/08 02:00ID:???
さきほどサーバー屋さんの方でレスキューさんのところのスクリプトは
上手く動いているとの返事を頂き、見て見ましたら確かに動いています。
何が違うのか調べてみます。
0046nobodyさん02/07/08 02:06ID:???
>>45
ここのPerl Checker(文法チェッカ)ってやつ使ってみれ
http://www.kent-web.com/utility/index.html
00473302/07/08 02:20ID:???
はい、さっそく使わせていただきます。
本当にご親切にありがとうございました。
0048質問02/07/08 12:44ID:nj01HSO5
初歩的な質問で申し訳ないのですが、

アクセス制御をCGIで行い、ID、パスワードが一致するとリンク先のHTMに飛ぶ

と言うのがよくありますが、これでリンクさきをCGIとすることは可能なのでしょうか?

アクセス制御(CGI)→ID、パスワード入力→掲示板のCGIって形なのですが・・・

CGI→CGIって言うのはどうなのでしょうか?

教えてください。よろしくお願いします。
0049nobodyさん02/07/08 12:48ID:???
>>48
やってみた上で言ってるの?
0050nobodyさん02/07/08 13:05ID:???
CGIだろうが、PNGだろうが、JPEGだろうが、Klez_h.emlだろうが、問題無い。
0051質問02/07/08 13:54ID:nj01HSO5
>>49

はい。やってみたのですが、飛んだ先がCGIのテキストで出てくるんですよ。
掲示板では無くて、CGIのプログラムが・・・・・
755とかアクセス権はきちんと確認しているのですが・・・・
0052画像ライブラリ02/07/08 14:46ID:E33z3r6c
有料でも無料でも、構わないのですが、写真素材のライブラリーを
作り、それを検索して表示できるようなCGIがあったら、
教えてくれませんか?
0053nobodyさん02/07/08 15:39ID:???
>>48飛び先に直リンクされたらおわりだな(ワラ
0054 02/07/08 18:06ID:???
>>51
そういうアクセス制御ではなく、目的のCGIソースの先頭に
追加するタイプのほうがいいだろう。
0055nobodyさん02/07/08 20:39ID:???
>>52
> 有料でも

なら、誰かに作ってもらいなさい。
0056nobodyさん02/07/09 02:21ID:???
アイコン付き掲示板に、アイコン一覧を表示させる機能を追加したいのですが、
@gazou には画像のキャラクター名が、
@url   には画像ファイルのURLが格納されてます。
@gazou[1]の画像ファイルは@url[1]となるよう揃えています。

print "<tr>\n";
foreach (@$gazou) {
print "<td>$_</td>\n";
}
print "</tr>\n";
}
print "<tr>\n";
foreach (@$gazou) {
print "<td><img src=\"$url\"></td>\n";
}
print "</tr></table>\n";
}

とやってみたのですが、テーブルが一列になってしまい、
非常に見栄えが悪いです。
恥ずかしながら、
foreach $1,$2 (@$gazou,@$url)
とやれば、それぞれに上手く入ってくれるかと思ったんですが駄目でした。

これを改善するにはどうしたらよろしいのでしょうか?
どうかよろしくおねがいします。
00575602/07/09 02:23ID:???
すいません、書いてるうちに混乱してしまいました。
今使っている正しいソースはこちらです。

print "<tr>\n";
foreach (@$gazou) {
print "<td>$_</td>\n";
}
print "</tr>\n";
}

print "<tr>\n";
foreach (@$url) {
print "<td><img src=\"$_\"></td>\n";
}
print "</tr></table>\n";
}
0058nobodyさん02/07/09 04:34ID:???
>>56-57

どう考えても、CGI(Common Gateway Interface)とは関係なくて、
単なる「Perl のコーディング」に関する質問なんだけど?
0059nobodyさん02/07/09 23:36ID:???
>>59
マゾレス
foreachじゃなくてforつかえ
0060nobodyさん02/07/09 23:43ID:???
>>59
どして?(素朴な疑問) 短いから?(笑)
0061nobodyさん02/07/09 23:48ID:???
>>60
理解できてなかったかもしれんが、>>56-57はアイコンをテーブルで

□□□□□
□□□□□
□□□□□
□□□□□

こんな感じで2次元配列で並べたかったんだろ?
だったらforのが簡単にできる。
0062nobodyさん02/07/09 23:52ID:???
for (@data) と foreach (@data) って違うの?!いっしょと思ってたYO!テストしてみます。あんがと。
0063nobodyさん02/07/10 00:01ID:???
>>62
いやいや、だから

print "<table>";
for($i=0;$i<$HEIGHT;$i++){
 print"<tr>";
 for($j=0;$j<$WIDTH;$j++){
  print "<td><a href=$url[$i*$WIDTH+$j]>$gazou[$i*$WIDTH+$j]</a></td>";
 }
 print "</tr>\n";
}
print "</table>";

こういうことがやりたいんじゃないの?
0064nobodyさん02/07/10 00:15ID:???
にゃるほど・・そういうことでしたか。 自分は>>56ではなくてただの素朴な質問者ですた。
まぎらわしくてスマソ(´Д`;)
for (@data) と foreach (@data) はいっしょですね。
0065Hideki ◆wtRzKEV2 02/07/10 00:28ID:???
僕が聞こうと思った質問はなんだったのかという質問。
スレ読んでる途中で忘れました。逝こう。
0066名無しさん@そうだ選挙にいこう02/07/10 01:59ID:2JSstgZh
このページのサンプルをサーバにアップしてみたんだけど、
「ご意見・ご感想をどうぞ」の部分の
ハンドルネームと内容の項目が表示されません。
 どうしてなのか、ご存知の方ご助言ください。

http://www.narishin.com/qnaire1.htm
0067nobodyさん02/07/10 02:02ID:???
>>66
こんな時間にネタはやめれ。
0068Hideki ◆wtRzKEV2 02/07/10 08:39ID:???
Apache 2.0.39では、なぜアドレス上のクエリーに日本語が入ると(urlエンコードされた)、
CGIが問答無用に動かなくなるのでしょうか?
Apache 1.3.26では動くCGIなのですが。ヘルプきぼん。
0069nobodyさん02/07/10 08:51ID:???
文字列のエンコードぐらいしる!
0070nobodyさん02/07/10 09:13ID:???
デコードじゃないか?
0071nobodyさん02/07/10 09:21ID:???
>なぜアドレス上のクエリーに日本語が入ると(urlエンコードされた)、CGI

妙な内容の括弧のせいで文章全体が崩壊していると思われ。
0072Hideki ◆wtRzKEV2 02/07/10 10:02ID:???
括弧内は”日本語”にかかった修飾です。
http://127.0.0.1/?Query=%a6%c6
デタラメですが、例としてはこんな感じです。

ちなみにデコードしるじゃなくて、CGIが頭から作動しなくなるの。
アドレスにurlエンコード入るとSSIが入ったページの全SSIがエラー起こしはじめます。
困りました。
0073nobodyさん02/07/10 10:14ID:???
Bugかな?
だれかApache 2.0.39を使ってるやつ他にいないか?

0074nobodyさん02/07/10 11:27ID:???
>>68, >>72
CGIと言ったりSSIと言ったり忙しい奴だな。
0075nobodyさん02/07/10 17:01ID:???
>>73 (゚Д゚)ハァ?

使えてますが、何か?

それより、>>68 >>72 があまりに馬鹿なのでだれも構ってくれないだけだろ
0076Hideki ◆wtRzKEV2 02/07/10 20:20ID:???
> あまりに馬鹿
え?
0077nobodyさん02/07/11 02:25ID:???
( ゚д゚ )ポカーン
0078nobodyさん02/07/11 02:25ID:???
( ゚д゚)ポカーン
0079nobodyさん02/07/11 10:47ID:???
(^д^)ポカーン
0080nobodyさん02/07/11 13:17ID:MOxFygTE
CGI改造専用スレに行くべきが迷ったのですが、
CGIそのものの改造ではないのでこちらで質問いたします。

ttp://www.prism-web.com/cgi/file/bbs/designbbs/index.html
ここの掲示板CGIをいただいて使おうと思っています.
この掲示板はデザインをテキストファイルで行います。
サンプル<tp://www.prism-web.com/cgi/file/bbs/designbbs/cgi/design4/bbs.cgi
(まだ見てるだけの状態なので、私のサイトにはないです。これは配布元のサンプル)
私が変更したいのは1箇所、「この記事へ返信」をリンクではなく、
投稿ボタンのような、ボタンにしたいのです。

どう変えればよいでしょうか。

0081nobodyさん02/07/11 13:30ID:???
>>80
十分に改造じゃないか。
ボタンにするだけならと簡単そうに考えてるかもしれないが、
そう簡単とは限らないよ。
00823PIO ◆3pIoOHKo 02/07/11 14:18ID:???
>>80-81
<FORM ACTION="./bbs.cgi" METHOD="GET">
<INPUT TYPE="hidden" NAME="mode" VALUE="res">
<INPUT TYPE="hidden" NAME="no" VALUE="スレ番号">
<INPUT TYPE="submit" VALUE="この記事へ返信">
</FORM>

こんな感じになればいいと思うけど
0083nobodyさん02/07/11 15:43ID:???
あとは JavaScript で飛ばすとか。。。
0084nobodyさん02/07/11 17:27ID:???
JavaScript 常時オフの場合は?
0085nobodyさん02/07/11 19:39ID:???
>>80
JSだとこうかな。 (mes_sheet.txt)

<script type="text/javascript">
document.write("<form><input type='button' onclick='javascript:location.href=\"$script?mode=res&no=$no\"' value='この記事に返信'></form>");
</script>
<noscript>
[<a href="$script?mode=res&no=$no">この記事に返信</a>]
</noscript>
00868002/07/12 14:15ID:lwKUS/YE
81>>
迷ったのよ・・・(w
なぜなら、その改造は掲示板のCGIを書き換えるのではなく、
CGIが読み込むデザインファイル(テキストファイル)
を書き換えるものだから・・・CGI改造とは言わないんじゃ?
とか思ったの・・・。
でも助言サンキュ。今度から改造スレに行くよ。。。

>>82
おおっ。そうか、そうすればよいのか・・・。
有難うございます(TT)
(hiddenをどうしていいのか詰まってた(w))
>>83,84
ナイス案サンキュ。
>>85
有難うございます。

>>ALL
みんな教えてくれてありがとね!  
0087nobodyさん02/07/12 15:21ID:???
>86
そう思うなら、HTMLスレに行った方がよかったと思われ。
0088nobodyさん02/07/13 18:34ID:???
Linuxサーバーで PerlでプログラミングしたCGIを動作させているのですが、
現在不都合が起きて困っております。

動作内容は FTPでアップロードした exe(自己解凍書庫)ファイルを
CGI経由でダウンロードさせる物です。

---- ここから ----
$|=1;
print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=\"$file\"\n\n";

open(FILE, "$file_path$file") || die;
binmode(FILE);
binmode(STDOUT);
print <FILE>;
close(FILE);
----- ここまで ----

exeファイル以外は上手くいったのですが、(Lzh、zip等)
exeファイルの場合は ダウンロードは出来るものの、
アップロード時とファイル容量が違っておりました。

アップロード時:32,051 バイト
ダウンロード時:37,718 バイト

ダウンロードした後実行すると、
「ヘッダーの内容が不正 解凍できません」とエラー表示されます。

print "Content-Type: application/octet-stream\n";
上記を print "Content-Type: application/x-msdownload\n"; に変更してみたのですが、
それでも上手くいきませんでした。

何か解決策があれば教えてください。
0089nobodyさん02/07/13 19:55ID:???
>>88
FTP でウpした時点で、既に exe ファイルが
壊れているとか。
0090nobodyさん02/07/13 22:13ID:An7VzFLr
http://pc.2ch.net/test/read.cgi?bbs=hp&key=1001744788&st=334&to=336&nofirst=true
これってどうなの?
0091nobodyさん02/07/13 22:16ID:???
携帯用アダルトサイト管理人の溜まり場
http://pc.2ch.net/test/read.cgi/hp/1001744788/l50
0092nobodyさん02/07/14 00:18ID:YPZNOz0d
>>89

アップロードしたファイルと元のファイルは同じもので、
再度FTPでダウンロードした場合正常に解凍できました。

他の原因としては何が考えられるでしょうか・・?

念のためにスクリプトを下記のように変更しました。

open(FILE, "$file_path$file") || die;
my $filebody = '';
while(read(FILE,$filebody,1024)){
print $filebody;
}
close(FILE);
0093 ◆JAPH9PWA 02/07/14 00:37ID:???
>>92
スクリプトに問題があるとは思えない。
ローカルのファイルサイズとFTPクライアントで見るサーバーのファイルサイズは本当に同じ?
0094nobodyさん02/07/14 00:40ID:???
>>93

再度確認しましたが同じでした。
CGI.pm を使って CGI経由でファイルのアップロードを行ったのですが、
その場合もだめでした。 exeファイルのみ壊れます。。
0095 ◆JAPH9PWA 02/07/14 00:50ID:???
う〜ん、何故だろう?ごめん、俺にはわからない。
0096nobodyさん02/07/14 00:54ID:CbCEC3kH
ダウンロード時にバイト数が増えているからファイル内容出力後に
余計なもの出力してるんだろ。
0097nobodyさん02/07/14 03:34ID:???
binmode?
0098 ◆JAPH9PWA 02/07/14 14:31ID:???
オリジナルファイルと壊れたファイルをバイナリ比較してみるしかないんじゃないかな。
>>97
Linuxサーバならbinmodeは無関係でしょ。
0099nobodyさん02/07/14 15:56ID:T31bpVIl
PATH_INFO での引数渡しにおいてのスラッシュの扱いについて質問です。

http://dokosoko.com/hugahuga.cgi/path/to/object
だと普通に動くんですが、
http://dokosoko.com/hugahuga.cgi/path%2Fto%2Fobject
だと、cgi 側に制御がいくまえにサーバが 404 Not Found を返してきます。
これって回避出来ないでしょうかね。
というか、なんで Not Found が返ってくるんだろ。
0100nobodyさん02/07/14 15:59ID:xUfIRkak
>>99
/path%2Fto%2Fobject というファイルが見つからないといってるんだから、
おそらく見つからないのでしょう。
0101nobodyさん02/07/14 16:10ID:???
スラッシュをURLエンコしたらディレクトリと見なされないのでは?
0102nobodyさん02/07/14 16:11ID:???
ブラウザが
0103nobodyさん02/07/14 16:41ID:T31bpVIl
>>99
なんでスラッシュがエンコードされてる時だけ
普通にファイルサーチするんでしょう??

>>101
ディレクトリと見なされないっていうのは...

/(documentroot)/hugahuga.cgi って"ディレクトリ"の
"path/to/object" を探そうとするってことですか?

%2f が入っちゃうと cgi の PATH_INFO として認識しないってことなのかな。
でも普通の QUERY_STRING 渡しとかだと別になにも問題ないですしね。

そういう仕様なんでしょうか。
http://hoohoo.ncsa.uiuc.edu/cgi/interface.html
見たけどよくわからなかった。

もし、その CGI に "slash/including/file" みたいにスラッシュを中に含んだ
名前を渡したいときってどうするべき?
といってもUNIX はスラッシュを含むファイル名って作れなかったか。
0104nobodyさん02/07/14 16:44ID:T31bpVIl
>>103

>>99 じゃなく >>100 でした。

あと、単純に PATH_INFO の内容を出力するだけのプログラムで実験したんで
CGI 中でエラー吐いてるわけじゃないです。
0105nobodyさん02/07/14 17:05ID:???
>>103
path/to/object(というディレクトリ)が存在すれば、 %2f でもPATH_INFO は取得できますね。

>もし、その CGI に "slash/including/file" みたいにスラッシュを中に含んだ
>名前を渡したいときってどうするべき?
そのまま hoge.cgi/slash/including/file では?
0106nobodyさん02/07/14 17:14ID:T31bpVIl
>>105
その場合の path/to/object ってディレクトリはどこですか?
/(documentroot)/path/to/object ですか?

あと、普通の URL の / をエンコードした場合も Not found です。
そりゃそうだ。

>そのまま hoge.cgi/slash/including/file では?
あう、そうでした。区切にスラッシュ使ってた場合、
区切りじゃないスラッシュはどうやって渡せばいいのかって話でしたけど
区切りにスラッシュ使うなってことで解決ですな。
0107nobodyさん02/07/14 17:57ID:???

PATH_INFO 解ってない馬鹿共が雁首並べているスレはここですか?
0108nobodyさん02/07/14 18:03ID:T31bpVIl
>>107
すみません。わかってません。
CGI の / 以降 ? 以前のところを PATH_INFO として
CGI に渡すってのでまちがってます?

で、なんで %2F を渡すと CGI に渡さないで Not Found になるのか
わからないんです。
0109nobodyさん02/07/14 18:04ID:???
>>106
>その場合の path/to/object ってディレクトリはどこですか?
hogehogeディレクトリ以下です(下図)
hogehoge / hoge.cgi
  |
  +----- path

>区切りにスラッシュ使うなってことで解決ですな。
まあその場合は素直に QUERY_STRING 使うってことで。
0110nobodyさん02/07/14 18:12ID:T31bpVIl
>>109
ええと、じゃあその %2f を含むパスの前の cgi プログラムの部分は無視
されるってことですか?

http://hogehoge.net/something.cgi/path%2fto%2fobject
の場合、
hogehoge / something.cgi
|
+----- path / to / object
で、
http://hogehoge.net/path/to/object と 等価????

それは違うような....??

とりあえず、 hogehoge 以下に path / to / object を配置してためしましたが
結果はおなじです。
something.cgi ってディレクトリを掘ってそこに path .. を配置しても同じでした。

サーバプログラムによるのかな。
当方 Apache/1.3.26 です。
0111nobodyさん02/07/14 18:27ID:T31bpVIl
Apache のソース見て完結しました。

PATH_INFO の中身は OS 上のファイル名として正しいかどうか検査されるらしく、
(PATH_TRANSLATED に渡すから。)
hoge.cgi/path%2fto%2fobject
とした場合、
/ 以降をきりはなしてから URL デコードが行なわれて
"path/to/object" というファイルが正しいかどうか検査されてしまうようでした。
で、スラッシュを含むファイル名は invalid なので Not Found になってしまうと。
0112nobodyさん02/07/15 01:06ID:K04tugP+
アクセス解析つけましたけどちょっと動きが変な感じがするので
テストです!どうぞ閲覧してください。アドバイスなどあれば
おねがいします。
http://s55.net/~S123/
0113nobodyさん02/07/15 09:16ID:???
新手の宣伝だな。
0114nobodyさん02/07/15 21:34ID:???
CGIの動作速度を計るにはどうしたらいいですか?
0115nobodyさん02/07/15 21:37ID:???
>>114
ストップウォッチ
0116nobodyさん02/07/15 21:39ID:???
>>115
それなし
0117nobodyさん02/07/15 21:42ID:???
>>116
ないなら買いにいけ。
0118nobodyさん02/07/15 21:44ID:???
>>117
その計り方がなし
0119nobodyさん02/07/15 21:48ID:???
>>118
これ以上正確なものってないだろ?
0120nobodyさん02/07/15 21:49ID:???
>>119
その方法はおれには無理だ
0121nobodyさん02/07/15 21:53ID:???
>>120
URLリクエスト実行と共にストップウォッチをスタートさせて、
ページが表示されましたがステータスバーに表示されると同時にストップ
、これを3回繰り返して平均値を採る。
0122nobodyさん02/07/15 21:54ID:???
>>121
もっと楽な方法が知りたいんだよ
0123nobodyさん02/07/15 21:55ID:???
>>122
地味な方法かも知れないけど、恐らくこの方法しかないから書いてんだよ。
0124nobodyさん02/07/15 21:56ID:???
>>123
そうか、ありがとう
0125nobodyさん02/07/15 22:04ID:???
なんで誰も腹時計を使わないんだ…?
0126 ◆JAPH9PWA 02/07/15 22:05ID:???
>>114
time(), time()か、そのインターフェイスであるBenchmark.pmを使いなさい。
0127 ◆JAPH9PWA 02/07/15 22:06ID:???
>>125
実際にはそれだけで済ますことが多いけどね(笑
0128nobodyさん02/07/15 22:06ID:FYJg29vU
Perl なら LWP つかってエージェント書いてみるとか。
HTTP::Monkeywrench とかも使えるかもしれない。
01299902/07/16 15:55ID:2ITiCbad
PATH_INFO なんですが、
IIS だと %2F は問題無く渡せるんですよね。
SCRIPT_NAME まではいっちゃうってのはあるけど。
なっとくいかないなぁ…
0130コギャル&中高生02/07/16 16:16ID:WKPR3v3m
http://go.iclub.to/ddiooc/

お役立ちリンク集
必ず役立ちます

コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便
↓
http://kado7.ug.to/wowo/
■ このスレッドは過去ログ倉庫に格納されています