ちくのう症(蓄膿症)は「菌」が原因!?

IEでPerlのgciにアクセスすると
500 Internal Server Error
だったので、
#!/usr/bin/perl
の次に -- を加えて再びIEでアクセスするとエラーはありませんでした。

普通に#!/usr/bin/perlのソースで正常に動作するように
したいのですが、解決策は分かりませんか?

-- というのはどういう意味ですか?
そうしてみれば動くことがあると聞いて試したものです。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

改行コードはOSごとに決まっています。


よって、設定変更で変えられるものではありません。
CR+LFのまま使いたいのならWindows上のサーバーで動かしましょう。

Windowsの改行コードはCR+LF (\x0D\x0A)
Linuxの改行コードはLF (\x0A)
MacOSの改行コードはCR (\x0D)
    • good
    • 0

ファイルの転送モードを正しく設定して下さい。



Windowsからサーバーにcgiのソースをアップロードする際、サーバーからWindowsにcgiのソースをダウンロードする際に、FTPの転送モードを「テキストモード」で行って下さい。

アップロードの場合には、Windowsで編集して改行が「CR」「LF」になっているソースが「LF」のみの改行に変更されて転送されます。

ダウンロードの場合には、サーバー上で改行が「LF」になっているソースが「CR」「LF」の改行に変更されて転送されます。

改行コードが「CR」「LF」のままバイナリモードでサーバーに転送すると、「CR」が邪魔をしてシェルがperlを起動できず、サーバー内エラー(500 Internal Server Error)が起きます。

つまり、以下のような事が起こっています。

「--」を付けない場合「/usr/bin/perl[CR]」は存在しないから起動できずエラー。

「--」を付けた場合「/usr/bin/perl --[CR]」は「/usr/bin/perl」が存在するのでperlを起動し「--[CR]」はperlに渡され、正しく起動出来たように見える。(「起動出来たように見える」と言うだけで、本当は正しくない)

なお、スクリプト(2行目以降)部分の各行の行末に[CR]が付いていた場合、スクリプトの書き方によってはperlが期待した動作をしない(文字列比較の判定式の結果が狂うなど)場合があるので、cgiがまともに動かない事があります。

この回答への補足

「--」というのはPerlですか?Apacheですか?
「--」改行の直前が「--」なら、「--」をその環境での
改行として扱うということですか?

サーバのOSはLinuxです。普通は*.cgiはLFでないと動かないらしいですか、CRLFでも動作するようにPerlかApacheで設定できませんか?

補足日時:2004/02/02 17:49
    • good
    • 0

サーバーによるのですが、


#!/usr/bin/perl
でエラーが出るならば、
#!/usr/local/bin/perl
ではないでしょうか・・・

この回答への補足

Perlのパスは間違いありません。
*.cgiの改行コードをWindowsからLinuxに変更すると
#!/usr/bin/perl --
にしなくても
#!/usr/bin/perl
で動作しましたが、
#!/usr/bin/perl で、かつ、改行コードをWindowsで
動作する環境にしたいと思っています。
どこを変更すればよいでしょうか?

補足日時:2004/02/02 13:21
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QCGIでソースがそのままでてしまうのですが・・・。

CGIでソースがそのまま表示されてしまうのですが、どうしてなのでしょうか?

先週からCGIやPerlを学び始めました。そこで簡単なものを試しに作ってみたのですが、入力したソースがそのまま表記されてしまいます。

ちなみに、こんなものです。

#! c:/perl64/bin/perl

print "Content-type: text/plain\n\n";
print "Hello Perl !";

どこをどう変えればいいのか、わからないので、質問してみました。

わかる方がいましたら、教えてください。

初心者なので、お手柔らかにお願いします。

.





この質問に補足する.

Aベストアンサー

CGIスクリプトのソースがそのまま出力されるのは、そのファイル/URIがCGIとして実行できていないためです。

httpd.confの<Directory>ディレクティブや<Location>ディレクティブなどの指定箇所が間違えているか、
ファイルの拡張子を間違えているか、
httpd.confを書き換えてからApacheをリスタートしていないか。。。


Forbiddenが出てきたら.cgiファイルに実行権限が無い。
Internal Server Errorが出てきたら、Perlがインストールされていないか.cgi拡張子とPerlが関連づけられていない。

ということが考えられます。


人気Q&Aランキング