
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'」と変えたところブラウザのコンソールからエラーが消えたという経緯があります。
No.1ベストアンサー
- 回答日時:
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できるんですが。
回答ありがとうございます.
返信遅くなってすみません.
上記のようにやってみたところ,
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>
No.2
- 回答日時:
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をフルパスにしてみたら、表示ができるようになりました!昔はなんでフルパスでなくて大丈夫だったのか謎ですのでちょっと調べてみようと思います。
ありがとうございました。大変助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) VBA ワークシート指定の1行目を選択をしたい 2 2022/08/20 18:10
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLEDITOR.NETでDTDを有効にす...
-
Winmerge ファイルの中身は同じ...
-
ファイル名で / (スラッシュ...
-
教えてください!困ってます。
-
嫌ってるのに真似してきたりマ...
-
10年前に振った元彼が、まだラ...
-
office365 ファイルを削除したい
-
ショートカットアイコンと、元...
-
コマンドプロンプトによるフォ...
-
ファイルの単位
-
onedriveの中身を削除したらパ...
-
ftpのmgetコマンドの自分の格納...
-
IPテレビのプレイリストだとお...
-
「$TD ファイル」を開く方法を...
-
emlをtxtに変換するには?
-
外字ファイル、eudc.tte と e...
-
ファイル操作(削除など…)の履...
-
同期センターのマークが出てま...
-
バッチファイルで変数の中身を...
-
クラリスワークスのファイルを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLEDITOR.NETでDTDを有効にす...
-
WIXでの複数ファイルインストー...
-
nmakeでNMAKE : fatal error U1045
-
htaccessについて
-
.htaccess ファイルでのアクセ...
-
ファイルopenができません
-
ユーザーディレクトリでCGIの実...
-
windows firefox mp4 見れない
-
SpryでXMLがうまく読み込めませ...
-
「500 エラー」表記への対処法...
-
Winmerge ファイルの中身は同じ...
-
教えてください!困ってます。
-
嫌ってるのに真似してきたりマ...
-
emlをtxtに変換するには?
-
onedriveの中身を削除したらパ...
-
ftpのmgetコマンドの自分の格納...
-
同期センターのマークが出てま...
-
コマンドプロンプトによるフォ...
-
ファイルの先頭行を全て削除したい
-
ここを「こんなくだらない質問...
おすすめ情報