どうしたら良いでしょうか?
★状況★
https://www.tokumei.jp/ssl/に「abc.pl」「def.pl」「.htaccess」を設置。
https://www.tokumei.jp/ssl/abc.pl で下記のような結果になる。「こんにちは」は表示されているので、requireがおかしいと思われる。
https://www.tokumei.jp/ssl/def.pl で「こんにちはおやすみなさい」と正しく表示
「def.pl」を「def.cgi」とリネームすると「Internal Server Error」となって動かない。
◆.htaccessの内容(下記abc.plと同じフォルダに設置)
AddHandler cgi-script .cgi .pl
Options ExecCGI
◆abc.plの内容()
#!/usr/bin/perl
print "Content-type:text/html\n\n";
print "こんにちは";
require './def.pl';
print "おやすみなさい";
◆def.plの内容
#!/usr/bin/perl
print "Content-type:text/html\n\n";
print "test";
◆https://www.tokumei.jp/ssl/abc.pl の結果
こんにちは
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator to inform of the time the error occurred and of anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
正常に動いたとして、require で呼び出した場合、出力が、
Content-type:text/html こんにちはContent-type:text/html testおやすみなさい
となりますがそれは大丈夫ですか?
require で呼び出されたファイルの最後で真を返さないとエラーになる仕様なので、最終行に 1; を追加した方がよいと思います。
http://cocohome.hp.infoseek.co.jp/perl_ref/require.html
実際のエラーは Apache のエラーログを見ないとなんともいえません。
ローカルサーバでは動作確認できたのでしょうか?
perlへのパスが誤っているように思います。
#!/usr/bin/perlで間違っていないか、確認してください。
「こんにちはおやすみなさい」と表示されているので、perlへのパスはあっていると思います。
また、他のサーバーへ挙げると動くので、自サーバー特有の問題だと思っています。
原因はいろんなものがあると思いますが,エラーログは見れないのでしょうか.
↑こっちが本題です.1の方も聞かれてますが.
たとえば,
・改行コードの影響で#!/usr/bin/perlが読み取れない(改名すると,というのは不思議)
・パーミションが間違っている
・実はAliasされていて実行ディレクトリが特殊
ログが見れないのであれば
require './def.pl';
の代わりに
eval { require './def.pl'; }; print $@ if ($@);
としてみるといいかもしれません.
1;
を追加してみましたが変わりませんでした。
また、「abc.pl」に1と追加し、「abc.cgi」にリネームして試してみたら結果は正しかった(改行はなかった)です。
こんにちは