• 締切済み

パーミッションについて

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

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.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です。

aja8
質問者

補足

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 . このような結果になりました. どうぞよろしくお願い致します.

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

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] という印のある行を何行か補足に貼り付けてください。

aja8
質問者

補足

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]

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

ちょっと状況を確認させてください。 まず 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 のオブジェクトを 作成している辺りだけでも良いです。

aja8
質問者

補足

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スクリプト作っても実行できないですよね. こういったエラーが出るのは何が原因でしょうか?大変恐縮です.

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> C:/xampp/htdocs/work/template/test.txt test.txt というファイルは間違いなくここにあるのですか? ファイルのパーミッションというよりは、Apacheの設定のような気がしないでもないですが… もし上記のディレクトリに間違いなくおいているという話なら /cygdrive/c/xampp/htdocs/work/template/test.txt でやってみるとか。

aja8
質問者

補足

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の設定のような気が> >しないでもないですが… 全くっていっていいほど初心者でわからないので環境設定など何か具体的にアドバイスいただけないでしょうか?よろしくお願い致します.

関連するQ&A