- ベストアンサー
win(active perl)では作動するが、linuxでは・・・
windowsXPをactive perl でサーバーにして、CGIのチェックを行っています。しかし、linuxサーバーに転送して作動させようとするとエラーが出て作動しません。パス、属性などの設定は行っており、さらに、他のCGIは問題なく動いている状態です。よろしければ、何がいけないのか教えてください。 このようなことがおこらないようにする予防策なども教えていただければ幸いです。 プログラムはhtmlからform形式でcgiに送信し、その後、cgi内で処理しするというものです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#フォーム解析 の行の下で標準入力から読み込む【つもり】のところが間違っている。 content_lengthなんて環境変数は存在しない。 CONTENT_LENGTHと大文字で記入しましょう。 Linuxでは大文字・小文字は区別されるものはしっかり区別されます。 Windowsはその辺特に区別ないからWindowsでは動いていたんじゃないでしょうか? CONTENT_LENGTHと大文字に変更するだけで動きました。 どこで問題が起きているのか逐一チェックしていけば発見できます。 特に経験がないならそうやって経験をつむことで怪しさ(チェックすべきところ)の優先順位がわかるようになってきます。 今回のも、質問者さんのスクリプトでは、 とりあえず変数を全部表示されてみればすぐにわかることかと。 $torisuに何も入っていないことがすぐにわかるのですから。 そしたらなんで入っていないんだろうというところから調べれば解決していきます。 WndowsとLinuxしかり、実装系(ActivePerlとPerl)しかり、システムの違いはしっかり把握したほうがよいかとおもいます。 その辺を知らずに最終的にLinux上で動作させるスクリプトをWindowsで作成・デバッグしてもシステムの差による問題は残りますから。
その他の回答 (2)
- kalze
- ベストアンサー率47% (522/1092)
同様の手順で行ったほかのCGIが動いているということなので、そのCGIにバグがあるだけではないでしょうか。 CGI内でのパスが間違っているとか、Activeperlにはあるが、Linux上のPerlにはない機能を使っているとか。 ご質問に回答するためには、#1の方もおっしゃっていますが、 ・エラー内容またはエラーログを書く ・ソースを書く のいずれかがないと厳しいかと 何が原因のエラーがどのように起きているかがわからない(わかりようがない)のに、解決策は示せませんので
お礼
早々の回答ありがとうございます。 繰り返しになりますが、質問の文字数制限により、ソースを記述することができませんでした。 #1さんの補足に記述させていただきましたので、よろしくおねがいします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
CGIとして動作させてみる前に まず、コンソールでテストしてみてはどうでしょうか? それと、どの部分で、どのようなエラー(メッセージ)がでるのかは特定できているなら それを書いて貰えませんか?
お礼
早々の回答ありがとうございます。 上記の細くのようなhtmlとCGIです。 質問に記述しようとしたのですが、文字数オーバーでできませんでした。 よろしくおねがいします。
補足
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.01//EN"> <html> <head><title>データ入力</title></head> <body> <form method = "post" action = "./kaiseki.cgi"> <input type = "hidden" name = "hp" value = "kosu"> データの個数を指定してください。ただし、自然数で2以上 <input type = "text" istyle="4" name = "torisu"><br> <input type = "submit" value = "送信"> </body> </html> #!/usr/bin/perl #フォーム解析 read (stdin, $torisu, $ENV{'content_length'}); foreach $pair (split(/&/, $torisu)) { ($key, $value) = split (/=/, $pair); $value =~ tr/+/ / ; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $form{$key} = $value; } print <<fst; content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.01//EN"> <html> <head><title>データ入力</title></head> <body> <form method = "post" action = "./kaiseki.cgi"> <input type = "hidden" name = "hp" value = "data"> fst $i = 1; $j = $form{torisu} + 1; $t = $form{torisu}; print "<input type = \"hidden\" name = \"torisu\" value = \"$t\">\n"; print "A<input type = \"text\" istyle=\"4\" name = \"hosei\"><br><br>\n"; while ($i < $j) { print "B$i<input type = \"text\" istyle=\"4\" name = \"B$i\"><br>\n"; print "C$i<input type = \"text\" istyle=\"4\" name = \"C$i\"><br><br>\n"; ++$i; } print "\n<input type = \"submit\" value = \"送信\">\n"; print "</body>\n"; print "</html>\n";
お礼
ありがとうございます。 大変参考になりました。以降、気をつけます。 変数が何も入っていないことにきずいてお手上げになっていました。これから試してみます。
補足
試しました。作成していたcgiのすべての作動を確認することができました。ありがとうございます。また、分からないことがあったときに質問します。そのときはよろしくお願いします。