- ベストアンサー
ファイルopenができません
- CentOS3.8、Apache2.0、perl5.8.0、SeaMonkey1.0.3の環境で、webブラウザからhttp://localhost/test.plを表示しようとしています。しかし、test.plの中でtest.htmlをopenさせる際にエラーが発生し、表示ができません。
- エラーログでは「システムエラー、test.htmlファイルを開くことができません」と出力されており、ブラウザのコンソールにもエラーが表示されません。
- 他のperlプログラムやtest.html自体は正常に表示することができるため、なぜtest.plからtest.htmlを開くことができないのかが問題です。
- みんなの回答 (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できるんですが。
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
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); } てな感じで。
お礼
>CGI用のスクリプトは専用のディレクトリ cgi-bin とかに放り込むのが 多いのじゃないかと思うのですが、どうでしょう? おっしゃるとおりなのですが、現在、既にあるプログラム類を、RedHat7.2からCentOS3.8へ移行する作業をやっており、前の環境で同じディレクトリに置いてあるため、それを踏襲しております。動作さえすれば、変更しても悪くはないのですが。。。 上記のようにやってみたところ、 script is in / とでました。htmlファイルもドキュメントルートに置いてあるのですが・・・。念のためopenのところでtest.htmlをフルパスにしてみたら、表示ができるようになりました!昔はなんでフルパスでなくて大丈夫だったのか謎ですのでちょっと調べてみようと思います。 ありがとうございました。大変助かりました。
お礼
回答ありがとうございます. 返信遅くなってすみません. 上記のようにやってみたところ, 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>