人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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.

●質問者: tetlis
●カテゴリ:インターネット ウェブ制作
✍キーワード:.htaccess ABC AddHandler anything CGI
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● b-wind
●27ポイント

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

Content-type:text/html

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

testおやすみなさい

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

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

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


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

◎質問者からの返答

1;

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

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

こんにちは


2 ● hoeizon
●27ポイント

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

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

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

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

◎質問者からの返答

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

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


3 ● k12u
●26ポイント

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

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

たとえば,

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

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

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

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

require './def.pl';

の代わりに

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

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


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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ