• ベストアンサー

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

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

noname#8942
noname#8942
  • CGI
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • 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";

関連するQ&A

  • ApacheがPerlを作動してくれないのです。。。

    CGIテストのためにローカルにサーバーマシンを立てました。サーバーはApacheを使用しPHPとPerlをそれぞれインストールしました。 PHPは正常に動いてくれますがPerlだけが何回やってもyou dont have a permission ~~~と表示されます。 ためしにコマンドでperl -v と打ったら正常にPerlは作動していました。ちなみにPerlは C:Perl\bin\perlになっておりCGIスクリプトにも #!C:Perl\bin\perlと表示しています。又、confも各サイトを見てCGIが動くようにしっかり編集しました。 どうすれば動くようになるのでしょうか?

  • VINE LINUXサーバーでCGIプログラムを動かしたい

    最近、デモ用の社内サーバーとして、VINE LINUX 2.1.5 の入ったPCをたてました。 クライアントはWindowsXPです。いくつかの社内用のプログラムを動かしています。 CGIプログラムを使用したいのですが、どのようにしたら良いでしょうか。 社内サーバーではなく、会社のホームページを表示させているサーバーは、レンタルサーバーで、CGIを使用しているので、CGIのプログラム自体は、自分でできます。 でも、CGIを使用する際の、サーバーの方の設定は分からないのですが。。 htmlを表示させ、CGIを動かしたみたのですが、CGIプログラムの内容がそのまま 表示されてしまいました。Perlをインストールするのではないかと思うのですが。。 だとしたら、VINE LINUX 2.1.5用のPerlのソフトはどこのサイトでダウンロードしてきたら良いでしょうか?

  • CGIフォームが作動しない原因について

    メールフォームのCGIを作成したところ、起動せず、500番のISEエラーになってしまいます。 他のサーバーに置いたところ問題なく起動し、 perlのパスは #! /usr/bin/perl #! /usr/local/bin/perl どちらもためし、 パーミッションも、705や755などで試したのですが、作動いたしませんでした。 また、メールフォームCGIに問題があるのかと、簡易的なCGIを設置し、パスやパーミッションをいじってみたのですが、そちらも作動いたしませんでした。(他サーバーでは機動確認済み) やはり、パーミッションやperlのパスがサーバーによって独自の設定になっているのでしょうか? その場合、サーバー管理会社に連絡をとらずに、確認する方法はあるのでしょうか? CGIやサーバーなどのネットワークに詳しくないもので、 どうかご教授ください!

    • 締切済み
    • CGI
  • RedHat Linux9のWebサーバーでのPerlの設定

    RedHat Linux9でWebサーバーをつくり公開しています。 今度、Perlを使ってCGIプログラムもアップしたいと思っています。しかし、RedHat Linux9でのPerlの設定が分かりません。私の持っている本ではPHPの設定なら載っていたのですが、Perlは載っていません。WEB上で設定方法を探して見たのですが見つかりませんでした。 どなたかPerlの設定方法を教えて下さい。 あと、RedHat Linux9ならPerlは標準で入っていますよね。。どこを見れば分かるのでしょうか。。

  • perl初心者です。

    現在、仕事でサーバを更改することになりlinuxのwebサーバをwindows2003にすることになりました。 今までlinuxで動いていたperlをwindowsに移行したいと考えています。perlの内容としては、名前等の情報を入力し、その情報を送信するというものです。perlの中身の/usr/sbin/となってるパスをC:\Perl\bin\perl.exeと変更するだけでいいのでしょうか?

    • ベストアンサー
    • Perl
  • php、cgi(perl)をlinuxに移行

    php、perl初心者です。 現在、windowsサーバーからlinuxサーバーに移行しようとしていますが、 widowsサーバーで動作していたphp、cgiが動作してくれません。 プログラムはDB接続情報以外は全く変更していないのですが、 http 500 内部サーバーエラーがでてしまいます。 ちなみにperl、php、MySQLのバージョンは以下となります。 perl : 5 php : 5.2.17 MySQL : 5.1.45 大変情報が少なく、申し訳ありませんが、 どのあたりに気をつけなければならないのかご教授していただけないでしょうか?

    • ベストアンサー
    • PHP
  • CGIがうまく作動せず困っています。

    CGIがうまく作動せず困っています。 先日、サーバー変更に伴いCGIデータをアップロードしたのですがうまくいきません。 Perlパス・Sendmailパスも以前とは違っていたので変更したのですが…。 テキストモードでアップしています。 You don't have permission to access /cgi-bin/webform.cgi on this server. とでます。 アクションの設定の仕方がおかしいのでしょうか? 前回は、cgi-bin が cgi-local でしたので その部分を変えただけなのですが。 初心者なのでできるだけやさしく教えてください。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • Windowsサーバ+Perl +アプリ実行は可能?

    Perlでコマンドを実行したいとき、 Linux/Unixサーバのなら system("コマンド名"); と、できるはずですが、 Windowsサーバ+Perlの場合、サーバにインストールされている プログラム/アプリケーションを実行したりすることは可能でしょうか。 具体的なイメージは ユーザーがブラウザからアクセスすると CGIは、サーバ側にインストールされているExcelを起動して マクロを実行、データをCSV形式ファイルに保存。 CGIは保存したCSV形式のファイルを展開し ブラウザ上で表示。 ということは可能ですか? もし可能ならPerlの書式を教えていただければ うれしいですー。

    • ベストアンサー
    • CGI
  • Perlのパス

    レンタルサーバーのCGIの説明で、「1.perl のパスは、/usr/bin/perl です。2.プログラムの先頭の記述は必ず、#!/usr/bin/perl となります。」って書いてあるんですけど、これを使用する場合、 http://www.kent-web.com/data/cart.html たぶん、admin.cgi , cart.cgi , order.cgi を エディタ で開いて以下の箇所をあたまの部分、#!/usr/bin/perl を変えればいいんですかね?それで1.の/usr/bin/perl は何処に書くのかな?それとも説明 の前置きですかね?「1.perl のパスは、」という意味はリンクがこうなるよ!って意味ですかね? ただま、KENT WEBみながら苦戦してます。 シロウトですいません。

    • ベストアンサー
    • Perl
  • CGI(Perl)でメールフォームを作ったのですが

    CGI(Perl)でメールアドレス、名前、内容のメールフォームを作ったのですがうまくいきません。 http://homepage.biglobe.ne.jp/errorpage/500.html CGIプログラムのエラーが発生しました。 原因 CGIプログラムの実行に問題があります。 まれに、予期しないサーバのエラーが原因でこのメッセージが出る場合があります。 と表示されます。 CGIのプログラムを作る前はHTMLだけで作っていました。 <form action="mailto:メールアドレス"~ メールアドレスを非公開で送信するには。

    • ベストアンサー
    • Perl

専門家に質問してみよう