dポイントプレゼントキャンペーン実施中!

CGIを読み込もうとするとエラーが出ます。何が原因でしょうか?エラー内容を見る限りテンプレートファイルのパーミッションに問題があると思うのですが, 具体的にどうしたらエラーが解決されるでしょうか?
CGIのperlへのパスをcygwinのperlへのパスにしています.

ご存知な方, ご教授よろしくお願い致します.

エラー内容
HTML::Template : template file C:/xampp/htdocs/work/template/test.txt does not exist or is unreadable. at /usr/lib/perl5/site_perl/5.8/cygwin/HTML/Template.pm line 1615

A 回答 (4件)

どうも xamppのperlを呼び出しているような気がしますねえ。


すみませんが、以下のスクリプトを適当な名前の cgiファイルにして、
c:\xampp\htdocs\ においてブラウザから実行してください。

---ここから
#!ここのPerlのパスはお使いのものに合わせてください
print <<EOM;
content-type: text/text

EOM

print "version = $]\n";
print "OS = $^O\n";
print "EXECUTE_NAME = $^X\n";

$" = "\n";
print "\@INC=@INC\n";
---- ここまで
コマンドラインからも実行できて、こんな感じになります。

わたしの環境での ActivePerlの場合
c:\xampp\htdocs>perl test.cgi
content-type: text/text

version = 5.008008
OS = MSWin32
EXECUTE_NAME = c:\Perl\bin\perl.exe
@INC=c:/Perl/site/lib
c:/Perl/lib
.

xamppに入っていたPerl
D:\xampp\htdocs>..\perl\bin\perl.exe test.cgi
content-type: text/text

version = 5.008007
OS = MSWin32
EXECUTE_NAME = ..\perl\bin\perl.exe
@INC=

Cygwin版
content-type: text/text

version = 5.008007
OS = cygwin
EXECUTE_NAME = /usr/bin/perl.exe
@INC=/usr/lib/perl5/5.8/cygwin
/usr/lib/perl5/5.8
/usr/lib/perl5/site_perl/5.8/cygwin
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/site_perl/5.8/cygwin
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/vendor_perl/5.8/cygwin
/usr/lib/perl5/vendor_perl/5.8
/usr/lib/perl5/vendor_perl/5.8/cygwin
/usr/lib/perl5/vendor_perl/5.8
.

とりあえずはCGIでやったときの結果だけでOKです。

この回答への補足

sakusaker7様,
ご回答いただき誠にありがとうございます.

#!C:/cygwin/bin/perl
print <<EOM;
content-type: text/text
EOM
print "version = $]\n";
print "OS = $^O\n";
print "EXECUTE_NAME = $^X\n";
$" = "\n";
print "\@INC=@INC\n";

をプラウザでCGIにアクセスしたところ,

version = 5.008008
OS = cygwin
EXECUTE_NAME = /usr/bin/perl.exe
@INC=/usr/lib/perl5/5.8/cygwin
/usr/lib/perl5/5.8
/usr/lib/perl5/site_perl/5.8/cygwin
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/vendor_perl/5.8/cygwin
/usr/lib/perl5/vendor_perl/5.8
/usr/lib/perl5/vendor_perl/5.8
.
このような結果になりました.

どうぞよろしくお願い致します.

補足日時:2008/01/27 15:41
    • good
    • 0

XML云々ということで、ファイルそのものはブラウザから見えるようですね。


次にエラーの件ですが、500エラーなんてのは発生する理由はたくさんありますので
なぜおきるのかと云われても答えようがありません。

が、xamppのApacheのログに情報が残っているはずですので、
それを確認してください。
c:\xampp 以下にApacheやらPerlがあるのであれば、
c:\xampp\apache\logs にApacheのログがあります。
いくつかファイルがあると思いますが、その中に error.log という名前の
ファイルがあります。CGIを実行して500エラーになったらすぐにそのファイルの中身を確認してください。


[Sun Jan 27 00:31:04 2008] [notice] Apache/2.2.6 (Win32) DAV/2 mod_ssl/2.2.6 OpenSSL/0.9.8g mod_autoindex_color PHP/5.2.5 configured -- resuming normal operations
[Sun Jan 27 00:31:04 2008] [notice] Server built: Nov 7 2007 11:48:48
[Sun Jan 27 00:31:06 2008] [notice] Parent: Created child process 3672
[Sun Jan 27 00:31:23 2008] [notice] Child 3672: Child process is running
[Sun Jan 27 00:31:23 2008] [notice] Child 3672: Acquired the start mutex.
[Sun Jan 27 00:31:23 2008] [notice] Child 3672: Starting 250 worker threads.
[Sun Jan 27 00:31:24 2008] [notice] Child 3672: Starting thread to listen on port 443.
[Sun Jan 27 00:31:24 2008] [notice] Child 3672: Starting thread to listen on port 80.
[Sun Jan 27 00:34:24 2008] [error] [client 127.0.0.1] Premature end of script headers: test.cgi
[Sun Jan 27 00:34:24 2008] [error] [client 127.0.0.1] Can't find string terminator "EOM" anywhere before EOF at D:/xampp/htdocs/test.cgi line 2.\r

↑こんな感じのテキストファイルです。
ログファイルの後ろの方にある [error] という印のある行を何行か補足に貼り付けてください。

この回答への補足

sakusaker7様,
ご回答ありがとうございます.
貴重なアドバイスありがとうございます.

エラーログは以下のようになっていました.

[Sun Jan 27 02:07:26 2008] [error] [client 127.0.0.1] HTML::Template : template file test.tmpl does not exist or is unreadable. at /usr/lib/perl5/site_perl/5.8/cygwin/HTML/Template.pm line 1615
[Sun Jan 27 02:07:26 2008] [error] [client 127.0.0.1] \tHTML::Template::_mtime('HTML::Template=HASH(0x100fb5f8)', 'test.tmpl') called at /usr/lib/perl5/site_perl/5.8/cygwin/HTML/Template.pm line 1666
[Sun Jan 27 02:07:26 2008] [error] [client 127.0.0.1] \tHTML::Template::_init_template('HTML::Template=HASH(0x100fb5f8)') called at /usr/lib/perl5/site_perl/5.8/cygwin/HTML/Template.pm line 1238
[Sun Jan 27 02:07:26 2008] [error] [client 127.0.0.1] \tHTML::Template::_init('HTML::Template=HASH(0x100fb5f8)') called at /usr/lib/perl5/site_perl/5.8/cygwin/HTML/Template.pm line 1124
[Sun Jan 27 02:07:26 2008] [error] [client 127.0.0.1] \tHTML::Template::new('HTML::Template', 'filename', 'test.tmpl') called at C:/xampp/htdocs/work/test.cgi line 5
[Sun Jan 27 02:07:26 2008] [error] [client 127.0.0.1]

補足日時:2008/01/27 02:09
    • good
    • 0

ちょっと状況を確認させてください。


まず
xampp環境が動いている状態でブラウザのアドレス欄に
http://127.0.0.1/work/template/test.txt
と入力して移動すると、質問者さんが作った test.txt の内容が
表示されますか? それとも何らかのエラーになりますか?

次にHTML::Template の synopsis にあるサンプルは動きますか?

具体的には、
C:/xampp/htdocs/work/template/
に、

<html>
<head><title>Test Template</title>
<body>
My Home Directory is <TMPL_VAR NAME=HOME>
<p>
My Path is set to <TMPL_VAR NAME=PATH>
</body>
</html>

という内容の、test.tmpl という名前のファイルと

#/usr/bin/perl -w
use HTML::Template;

# open the html template
my $template = HTML::Template->new(filename => 'test.tmpl');

# fill in some parameters
$template->param(HOME => $ENV{HOME});
$template->param(PATH => $ENV{PATH});

# send the obligatory Content-Type and print the template output
print "Content-Type: text/html\n\n", $template->output;

という名前の test.cgi というファイル
#最初の #! の行はお使いの環境に合わせて修正してください
を置き、

ブラウザのアドレス欄に
http://127.0.0.1/work/template/test.cgi
と入力して移動したときに正しく実行されますか?

以上二点のチェックで何もエラーにならないというのであれば、
実行しようとしているcgiファイルの内容を見せてもらえますか?
もしファイルのサイズが大きいようなら、HTML::Template のオブジェクトを
作成している辺りだけでも良いです。

この回答への補足

sakusaker7様,
ご丁寧にご回答ありがとうございます.
感謝です.

>xampp環境が動いている状態でブラウザのアドレス欄に
>http://127.0.0.1/work/template/test.txt
>と入力して移動すると、質問者さんが作った test.txt の内容が
>表示されますか? それとも何らかのエラーになりますか?

>XML ページを表示できません
>スタイル シートを使用した XML 入力は表示できません。エラーを訂>正してください。 [更新] ボタンをクリックするか、または後でやり>直してください。

というエラーが表示されてしまいました.

>ブラウザのアドレス欄に
>http://127.0.0.1/work/template/test.cgi
>と入力して移動したときに正しく実行されますか?

Server Error!
エラー500というエラーが出てしまいました.
やはり見事に正常に実行できませんでした・・・

まずこのCGIを実行できないようではperlスクリプト作っても実行できないですよね.
こういったエラーが出るのは何が原因でしょうか?大変恐縮です.

補足日時:2008/01/26 19:40
    • good
    • 0

> C:/xampp/htdocs/work/template/test.txt


test.txt というファイルは間違いなくここにあるのですか?

ファイルのパーミッションというよりは、Apacheの設定のような気がしないでもないですが…

もし上記のディレクトリに間違いなくおいているという話なら
/cygdrive/c/xampp/htdocs/work/template/test.txt
でやってみるとか。

この回答への補足

sakusaker7様,
お世話様です.ご回答ありがとうございます.

>test.txt というファイルは間違いなくここにあるのですか?
間違いなくあります.

>もし上記のディレクトリに間違いなくおいているという話なら
>/cygdrive/c/xampp/htdocs/work/template/test.txt
>でやってみるとか。
C:/xampp/htdocs/work/template/移動後, pwdコマンドを実行したら
/cygdrive/c/xampp/htdocs/work/template/にtest.txtはあります.

>ファイルのパーミッションというよりは、Apacheの設定のような気が>
>しないでもないですが…
全くっていっていいほど初心者でわからないので環境設定など何か具体的にアドバイスいただけないでしょうか?よろしくお願い致します.

補足日時:2008/01/26 01:35
    • good
    • 0

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