• ベストアンサー

win(active perl)では作動するが、linuxでは・・・

 windowsXPをactive perl でサーバーにして、CGIのチェックを行っています。しかし、linuxサーバーに転送して作動させようとするとエラーが出て作動しません。パス、属性などの設定は行っており、さらに、他のCGIは問題なく動いている状態です。よろしければ、何がいけないのか教えてください。  このようなことがおこらないようにする予防策なども教えていただければ幸いです。  プログラムはhtmlからform形式でcgiに送信し、その後、cgi内で処理しするというものです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kalze
  • ベストアンサー率47% (522/1092)
回答No.3

#フォーム解析 の行の下で標準入力から読み込む【つもり】のところが間違っている。 content_lengthなんて環境変数は存在しない。 CONTENT_LENGTHと大文字で記入しましょう。 Linuxでは大文字・小文字は区別されるものはしっかり区別されます。 Windowsはその辺特に区別ないからWindowsでは動いていたんじゃないでしょうか? CONTENT_LENGTHと大文字に変更するだけで動きました。 どこで問題が起きているのか逐一チェックしていけば発見できます。 特に経験がないならそうやって経験をつむことで怪しさ(チェックすべきところ)の優先順位がわかるようになってきます。 今回のも、質問者さんのスクリプトでは、 とりあえず変数を全部表示されてみればすぐにわかることかと。 $torisuに何も入っていないことがすぐにわかるのですから。 そしたらなんで入っていないんだろうというところから調べれば解決していきます。 WndowsとLinuxしかり、実装系(ActivePerlとPerl)しかり、システムの違いはしっかり把握したほうがよいかとおもいます。 その辺を知らずに最終的にLinux上で動作させるスクリプトをWindowsで作成・デバッグしてもシステムの差による問題は残りますから。

noname#8942
質問者

お礼

ありがとうございます。 大変参考になりました。以降、気をつけます。 変数が何も入っていないことにきずいてお手上げになっていました。これから試してみます。

noname#8942
質問者

補足

試しました。作成していたcgiのすべての作動を確認することができました。ありがとうございます。また、分からないことがあったときに質問します。そのときはよろしくお願いします。

その他の回答 (2)

  • kalze
  • ベストアンサー率47% (522/1092)
回答No.2

同様の手順で行ったほかのCGIが動いているということなので、そのCGIにバグがあるだけではないでしょうか。 CGI内でのパスが間違っているとか、Activeperlにはあるが、Linux上のPerlにはない機能を使っているとか。 ご質問に回答するためには、#1の方もおっしゃっていますが、 ・エラー内容またはエラーログを書く ・ソースを書く のいずれかがないと厳しいかと 何が原因のエラーがどのように起きているかがわからない(わかりようがない)のに、解決策は示せませんので

noname#8942
質問者

お礼

早々の回答ありがとうございます。 繰り返しになりますが、質問の文字数制限により、ソースを記述することができませんでした。 #1さんの補足に記述させていただきましたので、よろしくおねがいします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

CGIとして動作させてみる前に まず、コンソールでテストしてみてはどうでしょうか? それと、どの部分で、どのようなエラー(メッセージ)がでるのかは特定できているなら それを書いて貰えませんか?

noname#8942
質問者

お礼

早々の回答ありがとうございます。 上記の細くのようなhtmlとCGIです。 質問に記述しようとしたのですが、文字数オーバーでできませんでした。 よろしくおねがいします。

noname#8942
質問者

補足

<!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";