重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

webブラウザから
http://localhost/test.pl
と打って、perl_CGIを表示させようとしているのですが、どうもtest.plの中で、test.htmlをopenさせるところでエラーとなってしまい、表示できません。Apacheのエラーログでは「システムエラー、test.htmlファイルを開くことができません」としか出力されないし、ブラウザのコンソールでもエラーがでないので、困っております。なぜファイルが開けないのでしょうか???どうぞ宜しくお願いいたします。

【環境】
CentOS3.8、Apache2.0、perl5.8.0、SeaMonkey1.0.3
httpd.confで設定したデフォルトルート直下に、test.plとtest.htmlが存在します。

【その他現状説明】
・test.html自体をブラウザで表示させることは可能です。
・test.pl, test.htmlと同じディレクトリにある別のperlプログラム("hello"と出力するような簡単なもの)をブラウザで表示させることは可能です。
・以前は、test.htmlの中で、「width=100」となっていてエラーがでていたので、「width='100px'」と変えたところブラウザのコンソールからエラーが消えたという経緯があります。

A 回答 (2件)

open に失敗した直後に $! という特殊変数を見るとエラーの原因がわかります。



open my $fh, '<', 'test.html' or report_err($!);
な感じにして、

sub report_err {
my $msg = shift;

print <<EOS;
content-type: text/text;

error = $msg
EOS
exit(1);
}

でエラーの原因を探ってみてください。

CGI.pm 使っていると
CGI::Carp qw(FatalsToBrowser);
で、単純に dieできるんですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます.
返信遅くなってすみません.

上記のようにやってみたところ,
error = そのようなファイルやディレクトリはありません
とでてしまいました.
httpd.confの設定に問題ありということでしょうか.


●httpd.confの関連しそうな記述は以下があります.
<Directory "(ここにdocumentRootのPATH)">
Options Indexes ExecCGI FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

●perl.confの関連しそうな記述は以下です.
<Files *.pl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
</Files>

お礼日時:2007/05/01 00:12

CGI用のスクリプトは専用のディレクトリ cgi-bin とかに放り込むのが


多いのじゃないかと思うのですが、どうでしょう?

ブラウザから開くときはhttpdがよろしくやってくれるかもしれませんが、
CGIスクリプトから見るときにはそういう調整は入りません。
標準モジュールの Cwd を使って、スクリプトがおかれているディレクトリを
確認し、
それが開こうとしている htmlファイルの場所と違っていないかを確かめてください。

sub report_err {
use Cwd;

my $msg = shift;
my $dir = getcwd;

print <<EOS;
content-type: text/text;

error = $msg
script is in $dir
EOS
exit(1);
}

てな感じで。
    • good
    • 0
この回答へのお礼

>CGI用のスクリプトは専用のディレクトリ cgi-bin とかに放り込むのが
多いのじゃないかと思うのですが、どうでしょう?

おっしゃるとおりなのですが、現在、既にあるプログラム類を、RedHat7.2からCentOS3.8へ移行する作業をやっており、前の環境で同じディレクトリに置いてあるため、それを踏襲しております。動作さえすれば、変更しても悪くはないのですが。。。


上記のようにやってみたところ、
script is in /
とでました。htmlファイルもドキュメントルートに置いてあるのですが・・・。念のためopenのところでtest.htmlをフルパスにしてみたら、表示ができるようになりました!昔はなんでフルパスでなくて大丈夫だったのか謎ですのでちょっと調べてみようと思います。
ありがとうございました。大変助かりました。

お礼日時:2007/05/01 09:58

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