投稿日:2003年02月09日 作成鷹の巣

No.8334 Apache2.0でCGIが実行できません



Apache2.0でCGIが実行できません

No.8334 投稿時間:2003年02月09日(Sun) 19:44 投稿者名:Suzu URL:

RedHatLinux8上でApache2.0でWebサーバーを稼動させていますが
CGIが動きません。

httpd.confを下記の個所を変更しましたが、
CGIを実行すると
"Server error!
The server encountered an internal error and was unable to complete your request.
Error message:
Premature end of script headers: test2.pl
If you think this is a server error, please contact the webmaster
Error 500"
と表示されます。
また、cgi-binディレクトリ下に置いたHtmlファイルは
問題なく表示されます。

ScriptAlias /cgi-bin/ "/var/www/html"

<Directory "/var/www/html"
OptionsCGI
AddHandler cgi-script .cgi .pl
</Directory>

と追加しましたが、Errorになってしまします。
何か不足でもあるのでしょうか?


Apache2.0は使ってませんが、Options +ExecCGIではどうですか。

No.8336 投稿時間:2003年02月09日(Sun) 20:02 投稿者名:OAK URL:

>
> ScriptAlias /cgi-bin/ "/var/www/html"

この行は入れない方が良いみたい。

> <Directory "/var/www/html"

">" が抜けてます

> OptionsCGI
> AddHandler cgi-script .cgi .pl
> </Directory>
>
> と追加しましたが、Errorになってしまします。

私のマニュアルでは OptionsCGI というのは見つかりません
CGIを有効にするには<directory>で
Options +ExecCGI
AddType text/html cgi
AddHandler cgi-script cgi
を入れろと書いてあります

Options +ExecCGI ではどうですか。


Script~(省略)は無効にした方がいいのでしょうか?

No.8350 投稿時間:2003年02月10日(Mon) 01:21 投稿者名:Suzu URL:

コピペで記述していませんでしたので、間違っていました、、、、
先程の記述が誤りで、現在の設定は下記のとおりです
ScriptAlias /cgi-bin/ "/var/www/cgi-bin"
<Directory "/var/www/html">
Options ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>

でも、やはりScript~(省略)は無効にした方がいいのでしょうか?
Options ExecCGI ではNGなのでしょうか?
ちなみに本は「〇○〇〇式サーバ〇○入門 〇○〇〇のApache2.0」
(一部伏せておきます)です


そのディレクトリーでCGIを実行して見てください。

No.8365 投稿時間:2003年02月10日(Mon) 12:41 投稿者名:OAK URL:

> "Server error!
> The server encountered an internal error and was unable to complete your request.
> Error message:
> Premature end of script headers: test2.pl
> If you think this is a server error, please contact the webmaster
> Error 500"

test2.pl がEOFになりコンパイルできないて書いてあります。
そのディレクトリーでCGIを実行して見てください。

CGIがtest.cgiなら
$cd /var/www/html
$cd ./test.cgi

これで、Content-type: ...と出ますか?


同じ結果になってしまいました。

No.8380 投稿時間:2003年02月11日(Tue) 18:41 投稿者名:Suzu URL:

> test2.pl がEOFになりコンパイルできないて書いてあります。
> そのディレクトリーでCGIを実行して見てください。
>
> CGIがtest.cgiなら
> $cd /var/www/html
> $cd ./test.cgi
>
> これで、Content-type: ...と出ますか?

test.cgi にして
じっこうしましたら、

Server error!
The server encountered an internal error and was unable to complete your request.
Error message:
Premature end of script headers: test.cgi
If you think this is a server error, please contact the webmaster
Error 500

と同じ結果になってしまいました・・・


シェルからプログラム実行を

No.8383 投稿時間:2003年02月11日(Tue) 19:57 投稿者名:OAK URL:

ごめんなさい。コマンド間違えた。

Xterm などのシェルから

$ cd /var/www/html
$ perl -c test.cgi
$ ./test.cgi

を実行してください。


同じファイルに対しても行いましたが結果はかわりませんでした。

No.8425 投稿時間:2003年02月14日(Fri) 01:38 投稿者名:Suzu URL:

返事遅れてすみません

> $ cd /var/www/html
> $ perl -c test.cgi
ここまでの結果表示は
test.cgi syntax OK
と表示されました
> $ ./test.cgi
: bad interpreter : そのようなファイルやディレクトリはありません
と表示されました

cgi-bin下においてあります。同じファイルに対しても行いましたが
結果はかわりませんでした。

Apache2.0と1.3では設定ファイル内容が大きく異なっているのでしょうか?
見た目ではさほどかわっていないようですが・・・
それともRHL8と7.2とのOSバージョンによるものなのでしょうか?
いろいろと設定はいじっては見ていますが解決しません。


test.cgiファイル内のパス指定に「--」を追加しましたら正常に実行可能になりました。

No.8440 投稿時間:2003年02月15日(Sat) 01:55 投稿者名:Suzu URL:

他のスレ情報を参考にして、
test.cgiファイル内の
#!/usr/local/bin/cgi
の後に 「--」を追加しましたら
正常に実行可能になりました。

OAKさん、いろんな助言をいただきありがとうございました。


Perlのオプションについて

No.8392 投稿時間:2003年02月12日(Wed) 10:57 投稿者名:カイナン URL:http://yaguma.com

Suzuさん、OAKさん横槍すいません.カイナンです.
関連があるかもしれないので,報告します.
動作環境は,Vine linux 2.6+apache2です.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>Test CGI</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<p>This is test for CGI</p>\n";
print "<p>この文章を見ることが出来ればCGIは動いています</p>\n";
print "<br>\n";
print "</BODY>\n";
print "</HTML>\n";
のような簡単なCGIを作って,表示させると
500 Internal Server Errorが出てしまいます.
error_logはPremature end of script headers: testcgi.cgiです.
ところが,#!/usr/bin/perl --
とするとエラーなしに表示されます.
-sでも表示されました.
-s enable rudimentary parsing for switches after programfile
-sの具体的な意味についてはまだ分からず.
また,例えば「--」でなく「-」だけでも表示できます.
「--」ってなんでしょう?
知っている人いますか?
とりあえずこうすればCGIが動くこともあるということで.


DOSのファイルフォーマットでは?

No.8398 投稿時間:2003年02月12日(Wed) 12:46 投稿者名:OAK URL:

> Suzuさん、OAKさん横槍すいません.カイナンです.
> 関連があるかもしれないので,報告します.
> 動作環境は,Vine linux 2.6+apache2です.
> #!/usr/bin/perl
> print "Content-type: text/html\n\n";
> print "</HTML>\n";
> のような簡単なCGIを作って,表示させると
> 500 Internal Server Errorが出てしまいます.
> error_logはPremature end of script headers: testcgi.cgiです.

これはエラーしません。
行の最後がCRLF(0D0A)ではないのですか?(MSで作ってバイナリで持って行ったとか)UNIX では 0Aだけです
それとプログラムを作った場合必ず perl -c でチェックしてください。

hexdump test.cgi と行なって
改行が 0a か 0d0a かみてください。

> ところが,#!/usr/bin/perl --
> とするとエラーなしに表示されます.

行が0D0Aで終わっていると、 -- や -s がないと、/usr/bin/perl\r というプログラムを探し実行に行きます
-- があると スペースで区切られているので /usr/bin/perl というプログラムを探します。これは見つかる。

> -sでも表示されました.
> -s enable rudimentary parsing for switches after programfile
> -sの具体的な意味についてはまだ分からず.
> また,例えば「--」でなく「-」だけでも表示できます.
> 「--」ってなんでしょう?

-- や -s は プログラムアーギュメントの変数への変換です。CGIとして使う場合には
アーギュメントはないので関係有りません。


改行コードLFでエラーはなくなりました

No.8400 投稿時間:2003年02月12日(Wed) 15:20 投稿者名:カイナン URL:http://yaguma.com

OAKさんありがとうございます.
今まで,気づきませんでした.
>行の最後がCRLF(0D0A)ではないのですか?(MSで作ってバイナリで持って行ったとか)UNIX では 0Aだけです
>それとプログラムを作った場合必ず perl -c でチェックしてください。
改行コードをLFにしたところ,エラーはなくなりました.
ただ,改行コードがCRLFでもLFでもperl -cはsyntax okとでますので,私も含めて初心者が陥り易いところではあると思います.


Windowsでcgiファイルを編集するとき、どうやってCRLFをLFに変更するのかが分かりません。

No.8403 投稿時間:2003年02月12日(Wed) 23:13 投稿者名:りょうパパ2号 URL:http://www.ryo-papa-2nd.dyndns.org/

私もここ2~3日、Suzuさんと全く同じ現象で悩んでいました。もう少し詳しく教えていただけないでしょうか<m(__)m>
#!usr/bin/perlのあとに -- を付けるとうまく表示されるところまではこぎ着けました。また、改行コードCRLFをLFにすればいいと言うところも分かりました。でもWindowsでcgiファイルを編集するとき、どうやってCRLFをLFに変更するのかが分かりません。(秀丸とか使ってみたのですが...)
それから、全く同じ環境を会社のパソコンに作って同じcgiファイルをFTPするとこちらは何の問題も無く(--を付けなくても)ちゃんと表示されました。FTPはホームページビルダ6に付属の「ファイル転送」を使ってます。転送方式も自宅と会社ともにバイナリとASCIIの自動選択で送ってます。知人によれば、CRLFは、転送時に自動的にLFに変換してくれる..って言ってましたが?本当でしょうか?
ちなみに、初回、自宅のパソコンでGUIのHTTPD設定画面で設定しテストしていたときは、何も困ることはなくスムーズに設定ができていました。(いま会社に設定してあるパソコンと同じ動きをしていた)
ですから、一度はまともに動いていたという実績があるので、どうしても納得がいく設定にしたいと思っているのです。
納得がいく設定というのは、Windowsパソコンで編集し、--を付けなくてもcgiが動くような、しかも改行コードも気にしないでFTPすればちゃんと表示される設定のことを言っています。
httpd.confの設定次第で解消できるのでしょうか?
自己学習も継続するつもりですが、よいアドバイスがありましたらご教授ください。よろしくお願いします。


ftpを使えばたいてい自動で改行コードの違いを吸収してくれる

No.8404 投稿時間:2003年02月13日(Thu) 07:52 投稿者名:カイナン URL:http://yaguma.com

ftpを使えばたいてい自動で改行コードの違いを
吸収してくれるのですが,今回はsambaでWinと
つないであるLinuxのディレクトリにWinのエディターで
書き込んだことから起こりました.
>Windowsでcgiファイルを編集するとき、どうやってCRLFをLFに変更するのかが分かりません。(秀丸とか使ってみたのですが...)
linux上ではnkfもしくはPerl optionでできます.
$ nkf -s -Lu winfile > unixfile
$ perl -pe 's/\r\n/\n/' winfile > unixfile
などとすると文字コードsjisで改行コードはLF.
win上では秀丸で「名前を付けて保存」「改行コード=LF」でできます.
あと,パーミッションを変えることを忘れないように.


Apacheの設定に何か違いがあるように思えて仕方ありません

No.8417 投稿時間:2003年02月13日(Thu) 20:45 投稿者名:りょうパパ2号 URL:http://www.ryo-papa-2nd.dyndns.org

> win上では秀丸で「名前を付けて保存」「改行コード=LF」でできます.
> あと,パーミッションを変えることを忘れないように.

保存の時に選択できたのですね。一生懸命メニューバーの中を探してました。ありがとうございます。
ちなみに秀丸(シェア)は、やめてTeraPad(フリー)にしました。

> ftpを使えばたいてい自動で改行コードの違いを
> 吸収してくれるのですが,今回はsambaでWinと
> つないであるLinuxのディレクトリにWinのエディターで
> 書き込んだことから起こりました.

こちらもなんとなく理解できました。
でも、なぜftpツールで自動で変換される場合とされない場合があるのでしょう?
OS入れなおしする前は、ftpツールが自動でCRLFをLFに変換してくれてたと思うんですが。
Apache2.0(httpd.conf)の設定に何か違いがあるように思えて仕方ありません。
改行コードをフリーのエディタ等でLFに変換するのは、
そういったツールが開発されるくらいなので一般的なのでしょうね。


FTPクライアントの設定です

No.8420 投稿時間:2003年02月13日(Thu) 23:19 投稿者名:OAK URL:

> こちらもなんとなく理解できました。
> でも、なぜftpツールで自動で変換される場合とされない場合があるのでしょう?
> OS入れなおしする前は、ftpツールが自動でCRLFをLFに変換してくれてたと思うんですが。
> Apache2.0(httpd.conf)の設定に何か違いがあるように思えて仕方ありません。
> 改行コードをフリーのエディタ等でLFに変換するのは、
> そういったツールが開発されるくらいなので一般的なのでしょうね。

何をTextで何をBinaryで送るかは、apacheの設定でもftpdの設定でもなく
FTPクライアントの設定です。
FFFTPだとオプション-環境設定-転送1に設定します。
MSDOSやUNIXのftpコマンドは初期全テキストです。Binaryコマンドで切り替えます。


#!/usr/local/bin/perl --としましたら実行可能になりました。

No.8442 投稿時間:2003年02月15日(Sat) 02:03 投稿者名:Suzu URL:

> ところが,#!/usr/bin/perl --
> とするとエラーなしに表示されます.
> -sでも表示されました.
> -s enable rudimentary parsing for switches after programfile
> -sの具体的な意味についてはまだ分からず.
> また,例えば「--」でなく「-」だけでも表示できます.
> 「--」ってなんでしょう?
> 知っている人いますか?
> とりあえずこうすればCGIが動くこともあるということで.

私も初めて,#!/usr/local/bin/perl --
と後ろに「--」と追加しましたら実行可能になりました。

このことについては、Apache2.0の専門書籍やApacheのHPにも見当たりませんでした。
私はRHL8.0を使用していますが、OSとソフトとの間にでも問題があるのでしょうか?
まだ、他のOS(RHLシリーズ以外)では確認していませんが・・・・


|目次|掲示板|過去ログ目次|▲頁先頭|