• ベストアンサー

サーバを移行したのですが、プログラムが動きません。

はじめまして。 Perl超初心者です。 先日、あるサイトのリニューアルをし、PHPでシステムを組んだのですが、一部のコンテンツに関しては、前の業者がPerlで組んでいたシステムをそのまま転用することになりました。 そこで、以前のデータを貰って、サーバのcgi-binのフォルダにそれらのデータをコピーし、関係すると思われるファイルのパーミッションを、755にし、 また、以前は、ファイルの一行目が、#!usr/local/bin/perl だったのですが、 これを、#!usr/bin/perl に修正しましたが、動いてくれません。 Internal Server Error と出てしまいます。 試しに、単純な text.cgi #!/usr/bin/perl print "Content-Type: text/html\n\n"; print "OK"; というファイルを置いてみたのですが、これは動いています。 ちなみに、移行しなければならないcgiファイルは、プログラムの中で、.pl ファイルを複数読み込んでいるのですが、このファイルのパーミッションは、755で良いのでしょうか? また、このプログラムでは、 cgi-bin のディレクトリから、 data というディレクトリの中にある.datファイルを読み込むはずなのですが、このdataというディレクトリは、cgi-binと同階層に置けばよいでしょうか? Internal Server Errorというエラーは、どういうときに出るエラーなのでしょうか? 色々ファイルを操作しても、このエラーしか出ないので、どう対処してよいかよく分かりません。 不勉強で大変心苦しいのですが、 ご回答よろしくお願いいたします。

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • souta_n
  • ベストアンサー率33% (79/234)
回答No.1

Internal Server Errorの何番でしょう?番号によって意味が違います。 500だったらパーミッションが644とかになってるんじゃないでしょうか?パーミッションを755か700にすれば動くのでは? >.pl ファイルを複数読み込んでいるのですが、このファイルのパーミッションは、755で良いのでしょうか? 644でいいです。 >このdataというディレクトリは、cgi-binと同階層に置けばよいでしょうか? プログラムの中にopen(FH,<●●.dat); みたいな記述があると思うのですが、それが <●●.datか<./●●.datとなっていれば同一フォルダですし、<./temp/●●.datとかならtempというフォルダを作ってそこに入れとくことになります。 つまりopen命令で●●.datの置き場所を指定しているのです。

leeeeeeee
質問者

補足

早速のご回答ありがとうございます。 何とか動くところまで持ってくることができました! 500 Internal Server Errorだったので、500番だと思います。 ファイルのパーミッションは、755に設定済みでした。 先ほど、apacheのエラーログを発見しました。 内容は、以下のようなものでした。 Can't locate A.pl in @INC (@INC contains: /export/www/cgi-bin/lib/ /usr/local/lib/perl5/5.6.1/i386-freebsd /usr/local/lib/perl5/5.6.1 /usr/local/lib/perl5/site_perl/5.6.1/i386-freebsd /usr/local/lib/perl5/site_perl/5.6.1 /usr/local/lib/perl5/site_perl /usr/local/lib/perl5/5.00503 /usr/local/lib/site_perl .) at /usr/local/apache/cgi-bin/D/B.cgi line 25. [Fri May 13 17:06:05 2005] [error] [client 133.82.251.225] Premature end of script headers: /usr/local/apache/cgi-bin/D/B.cgi A,D,Bのディレクトリ名、ファイル名はふせます。 どうやら、config.plといった感じの名前のファイルを読み込んでいたようで、その中でさらに、config.cplというファイルを読み込み、そのファイルの中に、リンク先を記述していることが分かりました。 そこで、エラーログの /export/www/cgi-bin/lib/ というディレクトリが、今のサーバにはないことが分かったので、ここを、/usr/local/apache/に置き換えたところうまく動きました! ありがとうございました。

その他の回答 (1)

回答No.2

業者が、、、という事なので、関係ないかもしれま せんが、もしフリーのスペースで広告等がある場合、 それが邪魔をしてるかもしれません。 No1の方の通り、詳しくはわかりません。 plは読み込みだけなので、644でもOKです。 755でも、動くと思いますが。 datは、指定された位置に置いてください。 また、cgi-binもCGIを置く場所の指定がサーバに よって違います。 cgi-binの中のフォルダーならどこでもOKなものも あれば、スペース内ならどこでもOKもあるし、cgi-bin ってフォルダーがNGの場合もあります。 サーバのcgi設置方法と、cgiの中の説明をしっかり読み ましょう。

leeeeeeee
質問者

お礼

ありがとうございます。 読み込みだけのフィアルは、644でもOKということですね。勉強になります。 詳しいことは下に書きましたが、指定されていたファイルの位置が間違っていたのでそれを修正したところ動くようになりました。 そのほかのことも大変勉強になりました。 ありがとうございました!

関連するQ&A

  • CGI設置時に500エラーになります

    CGIを設置しようとしたところ、500 Internal Server Error になります。 共用サーバーIDを使用しています。 CGIファイルは「cgi-bin」の中に入れています。 たとえばこんな簡単なCGIでテストしたのですが、500 Internal Server Errorになってしまいます。 ↓ #!/usr/local/bin/perl print "Content-type: text/html \n\n"; print "Hello"; #!/usr/local/bin/perlを #!/usr/bin/perlにしても結果は同じです。 (サーバーの指定は#!/usr/local/bin/perl) パーミッションは755にしています(705に変えてもダメでした)。 CGIファイルの改行コードはLFにしており、テキスト(ASCII)モードでアップロードしています。 それでも500 Internet Server Errorになります。 サーバーではエラーログが見られないのでみなさんにお聞きしたいのですが、他にどんな原因が考えられるでしょうか?

  • 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が動きません

    サクラのレンタルサーバーを借りました。 早速CGIを試そうと思ったのですが、原因不明のInternal Server Errorが出ます。 cgi-binはいらないとのことですので、wwwにそのまま入れました。 index.htmlも同じ場所にありそれは出ますのでパス間違いではないです。 またパーミッションも777にしてみましたが駄目です。 #!/usr/local/bin/perl print "Content-Type: text/html\n"; print "\n"; print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; こんな感じで、TELNETでログインして実行も出来ます。 bash-2.05b$ ./index.cgi Content-Type: text/html <html><body>abc</body></html>bash-2.05b$ いろいろ調べたのですが ◆パーミッション→OK ◆TELNETで実行してみる→OK ◆perlへのパスは?→/usr/local/bin と /usr/bin どちらでもいいそうです。験しに変えましたが状況変わらず。 何か気が付いたことがあれば教えてください

    • ベストアンサー
    • CGI
  • TOK2で基礎的なCGIをUPしたが動かない。

    TOK2(http://tok2.com/)に「posttest2.cgi」をUPしました。 ファイルマネージャで確認すると、CGIのパーミッションは700、 CGIを設置するディレクトリーのパーミッションは701です。 以下 posttest2.cgiです。 -------------------START----------------------- #!/usr/bin/perl print "Content-Type:text/html\n\n"; print "<html>\n"; print "<head><title>テスト</title></head>\n"; print "<body>\n"; print "TEST"; print "</body></html>\n"; ------------------- END ----------------------- IEでこのCGIを開くと「500 Internal Server Error 」になってしまいます。。 なにが悪いのでしょう?

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

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

  • DebianのApache(掲示板)CGIエラー 500エラー

    debianでkent-webさんのASKA BBSを使いたいんですが うまくいきません http://www.kent-web.com/bbs/aska.html aska BBS rootで/lib/usr/cgi-binに移動してvi test.cgi ------------------------------- #!/usr/bin/perl print "Content-type: text/html \n\n"; print "Hello"; -------------- を試して http://192.168.1.12/cgi-bin/test.cgi は動くんですが which perl /usr/bin/perlです パスはあっています 本題のBBSをデスクトップにDLし tar -xvzf 解凍をし rootで/usr/lib/cgi-bin/に aska.cgi askalog.dat jcode.plを置き パーミッションをhttp://www.kent-web.com/bbs/aska.htmlにあわせて わらかないのでsuEXECサーバ CGIWrapサーバ用のパーミッションと一般サーバを両方ためしてみたんですが http://192.168.1.12/cgi-bin/aska.cgi?mode=checkで試したんですが 500エラーがてしまいます ちなみにaska/aska.cgi?mode=check のaskaフォルダは作らず cgi-bin/aska.cgiです かわらなそうなので http.confの設定は <IfModule mod_alias.c> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ # # "/usr/lib/cgi-bin" could be changed to whatever your ScriptAliased # CGI directory exists, if you have that configured. # <Directory /usr/lib/cgi-bin/> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> </IfModule> AddHandler cgi-script .cgi .sh .pl ちゃんと#を外してあります それとほかの質問者の方を参考にしたんですが mod_aliasなんたら モジュールとかよくわからず apt-cache search module cgiなどといろいろ探したんですが無く これのperlのパスをわざと間違えさせてやっると500でエラーが出るってことはちゃんと動いてるはずだと思うんですが ちゃんともどすとhelloと表示されます 間違えーー>#!/hogehoge/hogehge/perl 元-->#!/usr/bin/perl #!/usr/bin/perl print "Content-type: text/html \n\n"; print "Hello"; それと疑いがあるのが aska.cgiのパスはちゃんと/usr/bin/local/perlを whichでみたperlのパス /usr/bin/perlに設定したんですが 動かないみたいです もしかしてgnome-text-editorなどviで開くと文字コードがかわったりしてだめなんでしょうか? もう思い当たる節がありません どなたか詳しい方教えてくださいお願いします

  • 何がいけないんでしょうか?

    test.cgiの内容↓ #!/usr/bin/perl print "Content-type: text/html\n\n"; PRINT "<HTML>"; PRINT "<BODY>"; PRINT "おはよう"; PRINT "</BODY>"; PRINT "<HTML>"; 500 Internal Server Error というメッセージが出ます。 どうしてですか?

    • ベストアンサー
    • CGI
  • 「#!/usr/bin/perl --」でなければ動作しないのはなぜ?

    新しい職場に来て、あるCGIの設定を依頼されたのですが、どのような設定になっているのか、どのプログラムをアップしても「Internal Server Error」になってしまいました。 人に聞いて、「#!/usr/bin/perl」を「#!/usr/bin/perl --」としなければ動かないことまでは分かりました。 確かに、先に他の方が作成されたらしいCGIプログラム(単純な構成のものばかりです)ではすべて「#!/usr/bin/perl --」となってました。 こうしなければ、どんな簡単なプログラムでも絶対に動かないようです。 「*.cgi」というファイルが1つのみ(他の構成ファイルは他の形式)というプログラムならその方法で動いたのですが、複数の「*.cgi」ファイルで構成されているものはどうしても動きませんでした。 構成するファイルの中に、先頭に「#!/usr/bin/perl」の行がないファイルもあるのですが、もしかしてそのせいでしょうか? その場合、どうしたら解決できますか? そもそも何が原因なのでしょう? 今まで、色々な会社でCGIをいじってきましたが、初めての経験で戸惑っています。 FFFTPの設定(開業など)の問題ではないように思えるのですが、サーバーの設定がおかしいのでしょうか? 「#!/usr/bin/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
  • CGI プログラムエラーの解決法を教えてください。

    CGIの勉強をしている初心者です。 CGI プログラムを起動させると、 Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request.・・・・・ となってしまい、CGIがブラウザに表示されません。 どなたか解決法をご存知の方、教えてください。 (使用PCは、MacOSX(10.6.8)です。) 行った手順 1. Apacheの動作確認 [Machintosh HD]→[アプリケーション]→[システム環境設定] → 共有・アイコン → 「Web 共有」にチェックを入れる。 2. test.cgiを設置 設置場所 [Machintosh HD]→[ライブラリ]→[WebServer] → 「CGI-Executables」にtest.cgiを設置 test.cgiは下記 #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGI TEST</TITLE></HEAD>\n"; print "<BODY>ちわ!世界。</BODY>\n"; print "</HTML>\n"; __END__ 3.ターミナルでCGIプログラムに実行権をつける chmod 755 /Library/Webserver/CGI-Executables/test.cgi 4.ブラウザに「http://localhost/cgi-bin/test.cgi」を入力 最初に表示した「Internal Server Error」になってしまう。 ちなみに・・・ 1. ファイルに実行権限が付いているか確認したところ、下記のようになりました。 ls -la /Library/WebServer/CGI-Executables/test.cgi -rwxr-xr-x@ 1 taka staff 188 2. Syntaxを確認したところ、下記のようになりました。 perl -c /Library/Webserver/CGI-Executables/test.cgi /Library/Webserver/CGI-Executables/test.cgi syntax OK 3. ターミナルにて、which perlを確認したところ、下記のようにまりました。 /usr/bin/perl 4. tail -f /private/var/log/apache2/error_logにてApacheのエラーログを確認をしたところ、下記のようになりました。 [Thu Sep 22 22:31:17 2011] [error] [client 127.0.0.1] (8)Exec format error: exec of '/Library/WebServer/CGI-Executables/test.cgi' failed [Thu Sep 22 22:31:17 2011] [error] [client 127.0.0.1] Premature end of script headers: test.cgi エラーログの見方、解決法もわからない初心者です。 どなたか解決法をご存知のかた、教えてください。 どうぞよろしくお願いいたします。

    • 締切済み
    • CGI

専門家に質問してみよう