[Sat Mar 18 10:40:51 2006] [error] [client 192.168.0.5]
(2)No such file or directory:
exec of '/home/mm/public_html/cgi-bin/1001_cgi/1004_test/mail_form01.cgi'
failed, referer: http://www.bcnet.ne.jp/~mm/1001perl/1004_test/sample_form_002.html
[Sat Mar 18 10:40:51 2006] [error] [client 192.168.0.5]
Premature end of script headers: mail_form01.cgi,
referer: http://www.bcnet.ne.jp/~mm/1001perl/1004_test/sample_form_002.html
いままで 何の 問題も無く 動作していると 考えていたが
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator,
postmaster@bcnet.ne.jp and inform them of the time the error occurred,
and anything you might have done that may have
caused the error.</p>
<p>More information about this error may be available
in the server error log.</p>
<p>Additionally, a 500 Internal Server Error
error was encountered while trying to use an ErrorDocument to handle the request
.</p>
</body></html>
おかしいなーー
# pwd /var/data/aaa/apache2/logs /* ls -l 抜粋 */ -rw-r--r-- 1 apache apache 326 Mar 18 10:40 access_log -rw-r--r-- 1 apache apache 426 Mar 18 10:40 error_log # cat access_log 192.168.0.5 - - [18/Mar/2006:10:40:49 +0900] \ "GET /~mm/1001perl/1004_test/sample_form_002.html HTTP/1.1" 304 - 192.168.0.5 - - [18/Mar/2006:10:40:49 +0900] \ "GET /~mm/1001perl/002_css/index.css HTTP/1.1" 304 - 192.168.0.5 - - [18/Mar/2006:10:40:51 +0900] \ "POST /~mm/cgi-bin/1001_cgi/1004_test/mail_form01.cgi HTTP/1.1" 500 673
なんでやねん
# cat error_log [Sat Mar 18 10:40:51 2006] [error] [client 192.168.0.5] \ (2)No such file or directory: exec of '/home/mm/public_html/cgi-bin/1001_cgi/1004_test/mail_form01.cgi' failed, \ referer: http://www.bcnet.ne.jp/~mm/1001perl/1004_test/sample_form_002.html [Sat Mar 18 10:40:51 2006] [error] [client 192.168.0.5]\ Premature end of script headers: \ mail_form01.cgi, referer: http://www.bcnet.ne.jp/~mm/1001perl/1004_test/sample_form_002.html
ほなら この 方法では まだ 原因が 掴めません 動作しよるんです 泥沼に 入ります 原因追求は できまへん
$ perl -cw public_html/cgi-bin/1001_cgi/1004_test/mail_form01.cgi public_html/cgi-bin/1001_cgi/1004_test/mail_form01.cgi syntax OK $ perl -w public_html/cgi-bin/1001_cgi/1004_test/mail_form01.cgi content-type: text/html <html> <head> <title>thank you</title> </head> <body> <h1>thank you</h1> <p>thank you for your form submision. you wil be hearing from me shortly.</p> <p>return to <a href="../../../1001perl/1004_test/sample_form_002.html">nyanco site</a>.</p> </body> </html>
そうして
# pwd /var/spool/mail # cat mm From mm@lx.bcnet.ne.jp Sat Mar 18 10:44:26 2006 Return-Path:Received: from lx.bcnet.ne.jp (mm@localhost [127.0.0.1]) by lx.bcnet.ne.jp (8.13.5/8.13.5) with ESMTP id k2I1iPpl001492 for ; Sat, 18 Mar 2006 10:44:25 +0900 Received: (from mm@localhost) by lx.bcnet.ne.jp (8.13.5/8.13.5/Submit) id k2I1iPr7001491; Sat, 18 Mar 2006 10:44:25 +0900 Date: Sat, 18 Mar 2006 10:44:25 +0900 Message-Id: <200603180144.k2I1iPr7001491@lx.bcnet.ne.jp> to: mm@lx.bcnet.ne.jp from: anonymous user <mm@lx.bcnet.ne.jp> subject: sample web form submision
これは 多摩たま perl の PATH を 疑問に 思ったので 比較してみました
Plamo-4.03
$ which perl /usr/bin/perl $ uname -a Linux lx 2.4.31-plamo #14 Fri Feb 10 11:20:20 JST 2006 i686 unknown Plamo-4.03
plamo-3.3
$ which perl /usr/local/bin/perl $ ls -l /usr/local/bin/perl lrwxrwxrwx 1 root root 13 4月 4日 2004年 /usr/local/bin/perl -> /usr/bin/perl* $ ls -l /usr/bin/perl -rwxr-xr-x 2 root root 10408 3月 26日 2002年 /usr/bin/perl* $ uname -a Linux lx 2.4.22 #20 Wed Feb 8 23:05:14 JST 2006 i686 unknown plamo-3.3
ln -s /usr/bin/perl /usr/local/bin/perl
# pwd /usr/local/bin # ln -s /usr/bin/perl perl
これで 解決は するのですが
此処を 良く読むと わかるかも しんねい
http://www.itc.yorku.ca/manual/ja/howto/cgi.html
プログラムエラー
CGI プログラムが失敗するのは大抵、プログラム自身に問題がある場合です。 一度 CGI の使い方を理解し、前述の二つの誤りを犯していないならば、 まず間違いなくそうでしょう。ブラウザを使ってテストする前に まず確認することは、コマンドラインからプログラムが実行できることです。 例えば、以下を実行してみてください:
cd /usr/local/apache2/cgi-bin
./first.pl
(perl インタプリタは呼ばないでください。 シェルと Apache がスクリプトの最初の行の パス情報 を使って見つけます。)
パス情報と環境
コマンドラインからプログラムを実行するとき、 意識しなくてもシェルに渡される情報があります。 例えば、参照するファイルのためにどこを検索したらよいかを シェルに伝える PATH があります。
プログラムが CGI プログラムとしてウェブサーバによって実行されるとき、 それは同じ PATH ではないかもしれません。 CGI プログラム内で呼び出すあらゆるプログラム (例えば、sendmail のようなもの) は、 フルパスで指定する必要があるでしょう。それにより、CGI プログラムを実行しようとしたとき、 シェルはそのようなプログラムを見つけることができます。
同様なことは、スクリプトのインタプリタ (しばしば perl) へのパスで、CGI プログラムの 1 行目に次のように示されます:
#!/usr/bin/perl
これがインタープリタへの実際のパスであることを確実にしておきます。
まず 該当する ディレクトリに 移動して 現状の リンクを 退避 自信のある ひとは 削除でしょうが
# pwd /usr/local/bin # mv perl perl_back
該当する cgi の 場所にゆく
$ pwd /home/mm/public_html/cgi-bin/1001_cgi/1004_test
該当する cgi の 最初の 行は 残念ながら /usr/bin/perl で ないことを 確 認して
$ head mail_form.cgi | sed -n -e 1p #!/usr/local/bin/perl -w
実行してみると
$ ./mail_form.cgi bash: ./mail_form.cgi: /usr/local/bin/perl: bad interpreter: \ そのようなファイルやディレクトリはありません
そうして perl の 場所を だずぬれば
# which perl /usr/bin/perl
ほなら リンクを作成しよう
# ln -s /usr/bin/perl /usr/local/bin/perl # which perl /usr/local/bin/perl
再度 実行
$ pwd /home/mm/public_html/cgi-bin/1001_cgi/1004_test $ ./mail_form.cgi content-type: text/html <html> <head> <title>thank you</title> </head> <body> <h1>thank you</h1> <p>thank you for your form submision. you wil be hearing from me shortly.</p> <p>return to <a href="../../../1001perl/1004_test/sample_form_001.html">my site</a>.</p> </body> </html>
ターミナルに
New mail for mm@lx has arrived: ---- from: mm@lx.bcnet.ne.jp subject: sample web form submision ----
表示される 移動して
# cd /var/spool/mail/ # cat mm From mm@lx.bcnet.ne.jp Sat Mar 18 12:07:22 2006 Return-Path:Received: from lx.bcnet.ne.jp (mm@localhost [127.0.0.1]) by lx.bcnet.ne.jp (8.12.11/8.12.11) with ESMTP id k2I37Mic000454 for ; Sat, 18 Mar 2006 12:07:22 +0900 Received: (from mm@localhost) by lx.bcnet.ne.jp (8.12.11/8.12.11/Submit) id k2I37LkM000453; Sat, 18 Mar 2006 12:07:21 +0900 Date: Sat, 18 Mar 2006 12:07:21 +0900 Message-Id: <200603180307.k2I37LkM000453@lx.bcnet.ne.jp> to: mm@lx.bcnet.ne.jp from: mm@lx.bcnet.ne.jp subject: sample web form submision
移動して 復旧 こんな まどろっこしい 事は 必要無いでしょうが
# cd /usr/local/bin/ # ls -l | grep perl lrwxrwxrwx 1 root root 13 Mar 18 12:06 perl -> /usr/bin/perl* lrwxrwxrwx 1 root root 13 Apr 4 2004 perl_back -> /usr/bin/perl* # mv perl_back perl # ls -l | grep perl lrwxrwxrwx 1 root root 13 Apr 4 2004 perl -> /usr/bin/perl*
ヴァージョン が 新しくなっても 上手くゆくように なるとは 限らないが 新しく 誤動作の 対策が 出来るように なるかも しれない
にゃんたろう 拝!
2006年 3月18日 (土) 12:35:59 JST 作成