• ベストアンサー

PerlでFILEを埋め込もうとするとエラー

Perlでアクセスカウンターを作ろうと思っています。 そこでファイルオープンを勉強し、 CGIプログラムを実行しようとしたところ、 エラーが起こりました。↓ Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, ********@*********(伏せてあります) and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. ------------------------------------------ Apache/2.0.55 (Win32) Server at 127.0.0.1 Port 80 ソースを見てもおかしい所は見当たりません…↓ #! c:/perl/bin/perl open(FILE, "./sample.txt"); @data = <FILE>; close (FILE); print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>sample</title> </head> <body> <p>$data[0]</p> <p>$data[1]</p> <p>$data[2]</p> </body> </html> END サーバーはApacheを使っています。 原因がわかったら教えてください。 よろしくお願いします。

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

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

  • ベストアンサー
  • yuuki0229
  • ベストアンサー率70% (33/47)
回答No.4

ApacheのエラーログにPerlのエラーが載っていますのでそっちを参照してみてください。 logsディレクトリにログファイルがあります。 他に考えられる原因としてENDの直後に改行が無いのではないでしょうか。

djjjhhh
質問者

お礼

ENDの直後に改行…? フムフム…¢(._.)カチッ おっ!!!!なんと!!!!表示されました!! 改行なんかが関係あるなんて… いやぁ~ありがとうございます!! というわけで締め切らせていただきます!!

その他の回答 (3)

noname#15647
noname#15647
回答No.3

・ソースの1行目がパス指定になっていますか? (1行目が空行ではないですか?) ・パス指定は正しいですか?

djjjhhh
質問者

補足

>>・ソースの1行目がパス指定になっていますか? (1行目が空行ではないですか?) はい。 >>・パス指定は正しいですか? はい。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

ヒアドキュメントだから、とかではなくて httpヘッダと内容(content)の区切りとして空行は必須です。 http://www.rfs.jp/sb/perl/03/03.html

djjjhhh
質問者

お礼

指摘してくれてありがとうございます。 やってみましたが…また同じエラーが発生しました… 全く原因がわかりません…(~ω~;) もしかしたらApacheの設定とか… 調べてみます。

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

Content-type の後に改行(空行)が必要とか・

djjjhhh
質問者

補足

ヒアドキュメントですので大丈夫です…

関連するQ&A

  • Perlのエラーについて

    PerlでInternal Server Errorが表示します。 Perlのインストール、Apacheのインストール、Apacheの設定をしました。 Perlのバージョンは5.8.7.813です。 プロバイダはCGIのご利用に関する情報 Perl 利用できる(Ver5.10.1)です。 Perlをプロバイダのサーバーへアップロードするのですか? Internal Server Errorについてです。

    • ベストアンサー
    • Perl
  • ファイルの読み込み操作のコーディングについて

    perlのファイル読み込み操作についての質問です #!/usr/local/bin/perl #ファイルの読み込み open(FILE,"<diary.txt"); $data = <FILE>; close(FILE); #サーバー出力 print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>ファイルの読み込み</title> </head> <body> <h5> <p>$data</p> </h5> </body> </html> END 次のように、perlのコードを書いて無料の CGIの使えるレンタルサーバーに 設置したところ、エラーが出てしまいます dairy.txtはこのファイルと同じディレクトリで パスも間違えてないです、いろいろ自分で調べてみたんですが どこが間違えているかわかりません よろしかったらどなたかperlに詳しい方がいらっしゃったら 間違えている箇所を教えていただけないでしょうか?

  •  文書を作成してもサーバーはエラー (CGI超超初心者)

     よろしくお願い致します。  現在の状況を説明しますと  ●アパッチという仮サーバーをインストールして        ↓  ●10日で憶えるCGIという本のソースをそのまま   入力してネットにアドレスを入力して        ↓  ●きちんと動作するか確認する。  という作業をしていますが、何故かアドレスを入力して「さ~動くかな?  」と確認してもエラー表示がされるのです。今まではなんとか進んできて  たんですが。。。  自分の入力ミスかな、とくさる程確認をして、入力しなおしてもエラーが  表示されてしまいます。  どういうミスがあるのか、それ自体が分からない状況です。    ●拡張子はきちんとCGI●保存場所も本の通り、  申し訳ございません、助けて頂けると嬉しいです。ちなみに他の方の書き込  みが全く理解できません、宜しくお願いします。  ソースです。 #! c:/perl/bin/perl # ファイルの読み込み open(FILE, "./diary.txt"); @data = <FILE>; close(FILE); # サーバー出力 print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head><title>ファイルの読み込み</title></head> <body> <p>$data[0]</p> <p>$data[1]</p> <p>$data[2]</p> </body> </html> END

    • ベストアンサー
    • CGI
  • Apacheをlocalhostで動かしているのですが、Perlの引数

    Apacheをlocalhostで動かしているのですが、Perlの引数のないものやCGIはうまく動くのですが (設定はインターネットのサイトで調べました。)、exec cmd で Perlを呼び出すタグの入った Htmlを動かそうとしたら、Internal Server Errorになってしまいました。exec cmdの入って いないHtmlでもInternal Server Errorになってしまいました。ApacheではHtmlは動かせないの でしょうか、それとも設定がどこか問題があるのでしょうか。どなたかご存知の方よろしかったら 教えてください。ここのカテゴリーでよいのか悩みましたが、とりあえずよろしくお願いします。

  • Apacheをlocalhostで動かしているのですが、Perlの引数

    Apacheをlocalhostで動かしているのですが、Perlの引数のないものやCGIはうまく動くのですが (設定はインターネットのサイトで調べました。)、exec cmd で Perlを呼び出すタグの入った Htmlを動かそうとしたら、Internal Server Errorになってしまいました。exec cmdの入って いないHtmlでもInternal Server Errorになってしまいました。ApacheではHtmlは動かせないの でしょうか、それとも設定がどこか問題があるのでしょうか。どなたかご存知の方よろしかったら 教えてください。よろしくお願いします。質問がここのカテゴリーでよかったのかわかりませんでした が、サーバーと書いてあったのでここに投稿しました。間違ってたらすいません。

  • ローカルテストOKのPerl サーバでのエラーです。

    よろしくご教授下さい。 単純にフォームに入力された内容を確認するためのページを作成しようとしていますが、 ローカルでのテストはOKでしたが、いざサーバにアップするとサーバエラーが出ます。 ローカルのテスト環境 サーバ AnHTTP ActivePerl Ver.5 本サーバの環境 Apache Perlのバージョン 5.6.0 パーミッションは755に変更済み。 PerlのパスもOKです。 あと、考えられるエラーの可能性をご指摘頂けませんでしょうか? よろしくお願いします。 説明不足なとこがありましたら補足致します。 参考にならないかもしれませんが、一応・・・ サーバエラーの内容です。↓ Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, *******@*******.com and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. ----------------------------------------------------------- Apache/1.3.19 Server at www.********.com Port**

  • CGI/perlのエラー

    CGIのテストをしています。 サーバーはUbuntu14.04 htmlで <html> <head><title>HTMLサンプル</title></head> <body> ボタンサンプル<br> <form action="cgi-bin/test.cgi" method="post"> <button type="button">ボタン</button><br> <input type="submit" value="送信"> </form> </body> </html> test.cgi #!/usr/bin/perl system = ("date >> webwrite""); 実行すると End of script output befor heads: test.cgi のエラーで止まってしまいます。 ファイル webwriteは作成されています。 何か、終了処理が必要なもでしょうか?

  • レンタルサーバーでperlのcgiファイルを実行する手順を教えて下さい

    レンタルサーバーでperlのcgiファイルを実行する手順を教えて下さい。 レンタルサーバー会社からは、「cgi-bin」フォルダにcgiファイルを配置(アップロード)すれば ブラウザで見れると説明を受けました。 用意したcgiファイルは以下の内容です。 _____________________________ #! c:/perl64/bin/perl # CGIヘッダーの出力 print "Content-type: text/html\n\n"; #さいころを振る。 $n = int(rand 6) + 1; #HTMLの出力 print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0.1//EN\">\n"; print "<html>\n"; print "<head><title>Perlでさいころ</title></html>\n"; print "<body>"; print "<p>さいころの目は<big>$n</big>です。</p>\n"; #御言葉を出力 if($n == 4){ print "<p>ふ、不吉な・・・。4が出ました。</p>\n"; } print "<body></html>"; __________________________________________ 一行目が原因でしょうか。ローカルで作成した、cgiファイルをレンタルサーバーに配置(アップロード)し ブラウザから見たいと考えております。 ご存知の方、教えて頂けないでしょうか。 宜しくお願いします。

  • 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を使ってアクセスしたときのみエラーとなります。 このような現象が起こるのですが原因がわかりません。 お願いします。

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

専門家に質問してみよう