cgiが動かないのと、perlは動くのですが「require」で他のperlを読み込むことができません。

どうしたら良いでしょうか?

★状況★
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.

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2006/11/09 18:20:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント27pt

正常に動いたとして、require で呼び出した場合、出力が、

Content-type:text/html

こんにちはContent-type:text/html

testおやすみなさい

となりますがそれは大丈夫ですか?

require で呼び出されたファイルの最後で真を返さないとエラーになる仕様なので、最終行に 1; を追加した方がよいと思います。

http://cocohome.hp.infoseek.co.jp/perl_ref/require.html


実際のエラーは Apache のエラーログを見ないとなんともいえません。

id:tetlis

1;

を追加してみましたが変わりませんでした。

また、「abc.pl」に1と追加し、「abc.cgi」にリネームして試してみたら結果は正しかった(改行はなかった)です。

こんにちは

2006/11/02 19:29:38
id:hoeizon No.2

回答回数318ベストアンサー獲得回数20

ポイント27pt

ローカルサーバでは動作確認できたのでしょうか?

perlへのパスが誤っているように思います。

#!/usr/bin/perlで間違っていないか、確認してください。

http://www.aconus.com/~oyaji/faq/apache_cgi3.htm

id:tetlis

「こんにちはおやすみなさい」と表示されているので、perlへのパスはあっていると思います。

また、他のサーバーへ挙げると動くので、自サーバー特有の問題だと思っています。

2006/11/02 19:31:41
id:k12u No.3

回答回数80ベストアンサー獲得回数7

ポイント26pt

原因はいろんなものがあると思いますが,エラーログは見れないのでしょうか.

↑こっちが本題です.1の方も聞かれてますが.

たとえば,

・改行コードの影響で#!/usr/bin/perlが読み取れない(改名すると,というのは不思議)

・パーミションが間違っている

・実はAliasされていて実行ディレクトリが特殊

ログが見れないのであれば

require './def.pl';

の代わりに

eval { require './def.pl'; };
print $@ if ($@);

としてみるといいかもしれません.


http://q.hatena.ne.jp/answer

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません