• ベストアンサー
  • すぐに回答を!

Perlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない

現在Perlスクリプトを作成し サーバにアップしました。 SSHでサーバにログインし #perl a.cgi と実行したところ(CGIとして動作させるため。中身はPerlスクリプト) Content-type: text/html <html> <body> あああああ </body> </html> のようなメッセージが表示され正常に動作しているとおもいます。 しかし、 http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると 500 Internal Server Error になります。 パーミッションは755で正常 Perlのパスは#!/usr/bin/perlとしており、これも正常です。 文字コードはeuc-jp 改行コードLF サーバはApache/1.3.33 Perlバージョンは5.8.4 自分のパソコン上でperl+HTTPサーバ(httpd)を使うと HTMLふぁいるとして出力されます。 サーバ上でHTTPを使ってアクセスしたときのみエラーとなります。 このような現象が起こるのですが原因がわかりません。 お願いします。

noname#32059

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数181
  • ありがとう数5

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

  • ベストアンサー
  • 回答No.2
  • hrm_mmm
  • ベストアンサー率63% (292/459)

>500 Internal Server Error これは、パーミッションの問題ではなく、実行エラーですよね。 一行目は以下だけですか? よけいなブランク文字やスイッチとか後ろに付いてると、サーバーによってはエラーにされてしまう事があります。 コマンドライン実行では、スイッチ有効なのでエラーにならないから、こういう現象になるのかも。 #!/usr/bin/perl ※ perl cgi覚えたての頃、一行目の後ろにコメントを付けていて、unix系サーバーにアップするとエラーになったのだけど、原因がわからず四苦八苦した覚えが。。。 windows local サーバーでは、一行目を無視してたので気付くのが遅れた。 あとは、実際のスクリプトの方を見ないことには? なにか、そのサーバーでは使えないモジュールを使うような指定があったりとかしませんか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

投稿ありがとうございます。無事解決しました。 どうやら、ディレクトリのパーミッションが間違っていたようでした

関連するQ&A

  • 500 Internal Server Error

    500 Internal Server Errorが出ます。 サーバ:CentOS6.4 サーバ側の文字コード:UTF-8 perlのパス:/usr/bin/perl index.cgiの文字コード:LF (サーバ上で直接作成) index.cgiのパーミッション:777 (パーミッションの問題を避けるためわざと、777に設定) ここで、サーバ上で直接実行 perl /var/www/html/index.cgi すると、正しく処理の結果が返ってきてエラーは出ません。 しかし、クライアントのブラウザでindex.cgiにアクセスすると、500 Internal Server Errorが出ます。 なお、index.cgiを設置するディレクトリはApacheで以下のように設定しcgiスクリプトを有効にしています。 <Directory “/var/www/html”> Options FollowSymLinks ExecCGI </Directory> AddHandler cgi-script .cgi .pl #AddDefaultCharset UTF-8 ******************************************************* 【/var/www/html/index.cgi】 #!/usr/bin/perl print "Content-type: text/html"; print "<html>"; print "<body>"; print "<p>"; print "CGI"; print "</p>"; print "</body>"; print "</html>"; スクリプトの文法に問題があれば、サーバ上で直接実行させた時点でエラーを吐きそうですし、 パーミッションは777にしていますし、Apacheの設定もcgiを有効にしているので 他に500 Internal Server Errorが出る原因が掴めません。 Apacheの設定で、#AddDefaultCharset UTF-8 として文字セットを無効にした場合は CGIスクリプトの方で何か追加してやらないと、文字化け以前の問題で必ず500 Internal Server Errorを吐くんですかね? ご指導のほどよろしくお願い致します。

    • ベストアンサー
    • CGI
  • 私の作ったCGIスクリプトを見てください。どこが間違えていますか

    アクセスありがとうございます。 Red Hat Linux8.0でサーバを構築してCGIスクリプトを実行しようとしているのですが、どうもうまくいきません。 私が作成したCGIスクリプトは次のようなものです。 ファイル名「first.cgi」 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>First CGI</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "文字を表示するCGIです。\n"; print "</BODY>\n"; print "</HTML>\n"; そして文字コードを「EUC」、改行コードを「LF」に変換しサーバにアップロードしました。 その後SSHでサーバにログインし $ chmod 755 /home/burn/public_html/first.cgi と「first.cgi」に実行権限を追加し $ /home/burn/public_html/first.cgi と作成したCGIスクリプトをテストしてみたのですが : bad interpreter: No such file or directory とエラーメッセージが表示されてしまいます。 「そのようなファイルやディレクトリはありません」というような意味でしょうか。 しかし、そんなはずはないと思います。 $ ls /home/burn/public_html first.cgi と「ls」コマンドを実行すれば「first.cgi」が表示されるのですから。 他に何かする必要があるのですか。 このCGIスクリプトを動作させるにはどうすればいいのか教えてください。

  • ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!に関係なく実行できるようにするには。

    ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!のPerlを動かす場所(?)を指定する行が無かった場合や、違う場合でも、Apachが勝手にperlの場所を解釈しスクリプトを実行してくれるようになるhttpd.confの設定方法ってありますか?

    • ベストアンサー
    • CGI

その他の回答 (2)

  • 回答No.3

エラーログは見ることができますか? ステータス500 ならばその原因が出ているはずです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

投稿ありがとうございました 解決しました。

  • 回答No.1
  • tyunji
  • ベストアンサー率19% (68/349)

cgi用のディレクトリに置いていないからではありませんか? URLから見るとDocumentRootに置いているようですが。

共感・感謝の気持ちを伝えよう!

質問者からの補足

回答ありがとうございます。 レンタルサーバ(有料、さくらインターネット) CGIの使用について以下の記述がありました ファイルの拡張子 .cgi (「cgi-bin」ディレクトリは必要ありません) ファイルパーミッション 705 (または 755) ディレクトリパーミッション 705 (または 755) cgi-binディレクトリ 特に必要なし .htaccess 特に必要なし 推奨するファイルロック関数 flock DocumentRootにはおいておらず 元からあったwww ディレクトリに設置してあります。

関連するQ&A

  • 同じサーバー内で異なる文字コードで作成したスクリプトの実行について

    お世話になります。 LinuxでPHP4を使い、文字コード「EUC版」のwikiを利用していました。 今度、CMSのインストールを検討しているのですが、使いたいCMSでは UTF-8版しかありません。 同じサーバーの中で、複数の文字コードのPHPのスクリプトを実行する ことは出来るのでしょうか? php.iniの設定が必要な場合は、どの用に設定したらよいのでしょうか? 今は、php.iniの中で、mbstring.internal_encoding = EUC-JPと設定しています。

    • ベストアンサー
    • PHP
  • 自作cgiスクリプト動作に必要なPerlモジュールが判るツール

    初心者です宜しくお願いします 自作cgiスクリプト動作に必要なPerlモジュールが判るツールてありますでしょうか?自作スクリプトを作成し httpd.exe にActivePerl-5.10.1.1006-MSWin32-x86-291086.msi(デフォルト環境でインストール) をインストールした環境にて動作チェックしたスクリプトをサーバーにUPしましたが画像表示がうまくいきません。サーバー業者に問い合わせたところサーバーは問題なく動作してるとのことでユーザースクリプトのサポートは行わないと回答されてしまいました。そこで自作スクリプト動作に必要なPerlモジュールが判るツールとの質問になりました。 どなたかお分かりになる方よろしくお願い申し上げます。

  • Perlスクリプトについて

    よく配布されている掲示板CGI等のPerlスクリプトの場合は、コンパイル(コンピュータ上で実行可能な形式に変換)とかできないのでしょうか?やっぱりC言語を勉強するしかないのかな?意味不明な質問でしたら申し訳ありません・・・。 今現在かなりスペックが低い自宅サーバ(Windowsサーバ)を利用していまして、少しでもサーバへの負荷を減らせることができればと試行錯誤しています。

    • ベストアンサー
    • Perl
  • Perlの文字コード

    1-2年ほど前、Perl5.8でソース自体をUTF8N(LF)で記述するようになり、 以下のように書いていました。 use utf8; use encoding "utf8"; use Encoding; それからPHPに移り、PHPでは、ソースはEUC-JP、DBもEUC、HTMLに出力する際もEUC-JPで統一していました。 最近またperlを使い出して疑問に思ったのですが、 perlではどのような文字コードで統一すれば一番よいのかということです。 javascriptはUTFだと動作しない端末(ザウルス)などあり、 perlもEUC-JPで統一しようと考えています。 昔、UTF8にこだわったのは、おそらく 「構」という文字は5Cなので、 文字コードによる不具合(ソース,js,cssで)を避けるためと、流行のUTF8にしたと思います。 perlでEUC-JPで文字コード統一させるメリットデメリットが知りたいです。 最近perlで書かれたサイトでHTML出力がShift_JISだったのですが、perlソースもシフトJISかは知りませんが、Shift_JISで統一するデメリットが知りたいです。 あと、WEBでどの文字コードが現在主流で、今後どうなるかも知りたいです。 EUC-JPで安泰なら、話は早いですが・・・

    • ベストアンサー
    • Perl
  • PERL 宣言文 -wについて

    Perl初心者のWEBサーバエンジニアです。 サーバの移行に伴ってCGIファイルが動作していないため、ご相談になります。 【サーバ環境】 perl実行パス      /usr/local/bin/perl シンボリックリンク   /usr/bin/perl => /usr/local/bin/perl ソース記述       #!/usr/bin/perl ヴァージョン      5.8.5 perl実行環境      http://△△△.jp/cgi-bin/ ※apacheのスクリプトエイリアス指定 options +ExecCGI -Include SetHandler cgi-script 上記の環境で、cgiファイルが500internalサーバエラーになる現象が発生しています。 ファイルは以前動作したサーバから引っ張ってきました。 原因を探っていたのですが、cgiファイルのソース記述を #!/usr/bin/perl -w と記述を変更すると正常に動作しました。 -w について 【1度しか出現しない識別子や、初期化されずに参照される変数など、危険、無駄と思われる処理の警告を出力します。実際にはもっとたくさんの種類のチェックをするようです。】 と言う事はわかりましたが、いままで、-wなしで動作していたので、-wなしで動くよう、perlの設定を変更したいとかんがえております。 なにぶんPERL初心者ですので、同様の事象で知見がある方、ご教授を宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • plalaのcgiサーバへのPerlプログラムのUPについて

    windows上のローカルサーバで、自作のperlプログラムを動かし、きちんと動作したのでplalaのcgiアカウントをとり、UPした後、パーミッションもplalaの注意書きに書かれていたとおり、ディレクトリ以外のバイナリや、テキストを「704」に変更しました。 Perlへのパスも間違っておらず、プログラムミスということもないと思っています。 しかし、UPしたcgiファイルにアクセスしようとすると、「Internal Server Error」と表示され、パーミッションを「755」などにかえても、パーミッションがおかしいとでます。 いったいパーミッションを何にすればよいのでしょうか?

  • cronでのPerlスクリプト実行

    少し前に同様の質問をしましたが、やはり解決していませんでした。 #!/usr/bin/perl open(OUT,">/home/test/test.log"); print OUT "OK"; close(OUT); このスクリプトをcrontabに以下のように記述しました。 0 0 * * * /home/test/test.pl > /dev/null 2>&1 パーミッションは省略します。 このようにすると、正常にtest.logが出力されました。 しかし、本当に実行したいスクリプトを同様にしたところ、 正常に動作しませんでした。cronログには記録されます。 実際のスクリプトは長いのでここには掲載できませんが、 主な処理はおおよそ次のようなことをしています。 ・pmとplモジュールがあり、plからpmを呼び出している。 ・plもpmも自作のユーザ関数の組み合わせ ・ファイルはtestユーザが所有し、実行権限は777。  (動作確認後、徐々に落としていきます) ・plでは、use encoding 'utf8'。 ・スクリプトにオプションを付けて、引数を読み込む。 ・loggerでsyslogへ結果を出力。 ・子プロセスを生成して処理の一端を行わせている。 ・opendir、readdirなどを使用。 ・xxxxxx.datファイルを読み書きしている。 ・CPANにあったメール送受信モジュールを使用している。 ・ファイルをbz2圧縮している。 などです。 コマンドラインから実行すると確実に正常に動作します。 気になるのはPerlスクリプトの内容でモジュールを使うときは、 パスが通っていてもフルパス指定しないといけないのでしょうか? しかし、フルパスと言ってもせいぜいsystem()で実行するコマンドを フルパスにするくらいしか思いつきません。 うまく実行できない理由として考えられる可能性があることを 教えてもらえませんか? 根本的な解決としては、cronでの実行とコマンドラインからの実行は 何が違うのかが明確になれば対処できるのかもしれません。 よろしくお願いします。

  • pythonスクリプト実行不可

    pythonスクリプトをCGIとして動作させるとエラーになります。 環境は、 OS : CentOS 6.4 Python : 2.6.6 pythonソースは、 #!/usr/bin/python # coding: utf-8 print "Content-type: text/html; charset=UTF-8" print print ブラウザーから、このCGIを直接起動すると、/var/log/httpd/error_logに下記のエラーが出ます。 [Fri Oct 18 12:45:28 2013] [error] [client 10.1.34.89] (8)Exec format error: exec of '/home/httpd/cgi-bin/test.py' failed Exec format errorとは、何でしょうか? perl CGIは、正常に動作しているのですが。 アドバイスよろしくお願いします。

  • Rubyのcgiが動作しません。

    下記のように4行のルビーのcgiを作りました。 ファイル名rb.cgi #!/usr/bin/ruby print <<EOF あああ EOF これをRubyを提供しているapacheサーバにアップロードし パーミッションを777にしました。 文字コードはEUC、改行はLFのみです。 しかし、Internal Server Errorが表示されます。 そこで、サーバにログオンし、このcgiファイルの ディレクトリまで移動し、./rb.cgiを実行すると あああと表示されます。また、このcgiファイルと 同一ディレクトリにあるparlのcgi(掲示板)は 正常動作しています。 どこが間違っているのでしょうか?

    • ベストアンサー
    • CGI
  • IISでCGIとしてのPerlが動かない

    Win2K ProにてIISでローカルサーバーでサーバーサイドスクリプトの勉強中です。 ASPは標準でついているので、PerlとPHPを組み込みました。 PHPは内部プロセス型ではなく、CGIバージョンですが、正常動作しました。 もちろんASPも。 それで問題なのですが、Perlがどうしても動きません。 PHPと同じように実行ファイルのパスや拡張子の設定はできているはずです。 しかし、いつまでたっても出力が出ず、2分くらいたってCGIタイムアウトとなってしまいます。 PerlにはActive PerlとCygwin付属のPerl両方試しましたが、タイムアウトです。 ファイルをコンソール上で実行してみましたが、Active PerlもCygwinのPerlも、期待通りの出力がなされています。 ちなみに、shファイルをCygwinのbashに関連付けて、実行させましたが、コンソール上での出力とはうらはらに、ブラウザ上ではやはりタイムアウトとなりました。 PerlのソースはいずれもほかのところのApacheでは動いているものです。 httpヘッダも正常です。 ソースの文字コードは英語のみ、EUC、改行コードcr+lf、lfのみなど、いろいろ試しましたがダメでした。 なにが原因なのでしょう。 IISを使っている方、アドバイスお願いします。