はじめまして。ここのHPを参考にさせて頂いて、Linux+Apache2で、サーバーを構築しています。
掲示板CGIについて質問させていただきたいと思います。
設定を済ませて、CGIをブラウザから見てみると500サーバーエラーが出てしまいログで確認をすると
CGIスクリプト内の「require './jcode.pl';」に問題があるようなので「require 'jcode.pl';」
と変更したら、とりあえず表示されました。しかし、書きこもうとすると「LOGのパスが不正です:NG → ./askalog.cgi 」と出てしまいます。CGIスクリプトファイルには、「$logfile = './askalog.cgi';」
と記述してあります。これを「$logfile = 'askalog.cgi';」としても「LOGのパスが不正です」と出てしまいます。
掲示板CGIを十種類くらい試しているんですがどれも同じで、エラーが出てしまいます。
パーミッション、Perlへのパスは、間違いなく設定しています。
何が原因かわからず困っております。
ご存知の方がいらっしゃったらご教授頂きたいと思います。よろしくお願いします。
情報が乏しくちょっとわかりませんが、まずperlは動作していますか?
下記のスクリプトを試して下さい。
例)
#!/usr/bin/perl
print "Content-type: text/html\n";
print "\n";
print "<HTML>\n";
print "<H1>Hello!</H1>\n";
print "</HTML>\n";
> 情報が乏しくちょっとわかりませんが、まずperlは動作していますか?
> 下記のスクリプトを試して下さい。
Tonさんアドバイスありがとうございます。
このスクリプト試しました。perlは動作しています。
Linuxでのサーバー構築の書籍を持っていて、そこに書かれているテスト用の簡単なスクリプトは、動作するんですが
掲示板、チャット等のCGIになるとエラーがでるのです。
1.「#!/usr/bin/perl--」を試してみても動きません。
2.パーミッションは、スクリプト配布もとの指定どおりにしています。
3.CGIスクリプト内の「require './jcode.pl';」に問題があるようなので「require 'jcode.pl';」
4.3のように修正をするとCGIファイルは正常に表示されるんですが、投稿するときに、datファイルや、logファイルへのパスが不正だと出るんです。
5.「./」「../」などがついているとエラーが出てしまうんです。
> パーミッション、Perlへのパスは、間違いなく設定しています。
> 何が原因かわからず困っております。
> ご存知の方がいらっしゃったらご教授頂きたいと思います。よろしくお願いします。
やはり怪しいのはパーミッションです。
> $logfile = './askalog.cgi';
なぜログの拡張子をcgi にしているか理解に苦しむところですが
CGIの入っているディレクトリーに askalog.cgi と言うファイルがありその
モードは 666 になっていますか?
> 「LOGのパスが不正です:NG → ./askalog.cgi 」と出てしまいます
こんな時はエラーの種類をチェックする。
CGIに "LOGのパスが不正です:NG → $logfile" と記述されている部分がありますので
そこを "LOGのパスが不正です:NG → $logfile error= $! " と変更しエラー情報を一緒にだす。
これでどんなエラーなのかわかります。
sakuraIIIさんアドバイスありがとうございます。
> やはり怪しいのはパーミッションです。
> > $logfile = './askalog.cgi';
> なぜログの拡張子をcgi にしているか理解に苦しむところですが
> CGIの入っているディレクトリーに askalog.cgi と言うファイルがありその
> モードは 666 になっていますか?
パーミッションは、もう一度確認致しましたが間違いありません。「なぜログの拡張子をcgi にしているか理解に苦しむところですが」と言われましても、フリーのスクリプトを利用しているので私には分かりません。
> こんな時はエラーの種類をチェックする。
> CGIに "LOGのパスが不正です:NG → $logfile" と記述されている部分がありますので
> そこを "LOGのパスが不正です:NG → $logfile error= $! " と変更しエラー情報を一緒にだす。
> これでどんなエラーなのかわかります。
この部分を探し、ご指摘どおりに記述してみましたが、今度は、500サーバーエラーになってしまいます。
いろいろやっていて気になったんですが、Linuxでは、CGIスクリプトに「./****.log」等のように
「./」を記述してはいけないのでしょうか?
> 掲示板CGIについて質問させていただきたいと思います。
> 設定を済ませて、CGIをブラウザから見てみると500サーバーエラーが出てしまいログで確認をすると
> CGIスクリプト内の「require './jcode.pl';」に問題があるようなので「require 'jcode.pl';」
> と変更したら、とりあえず表示されました。しかし、書きこもうとすると「LOGのパスが不正です:NG → ./askalog.cgi 」と出てしまいます。CGIスクリプトファイルには、「$logfile = './askalog.cgi';」
> と記述してあります。これを「$logfile = 'askalog.cgi';」としても「LOGのパスが不正です」と出てしまいます。
> 掲示板CGIを十種類くらい試しているんですがどれも同じで、エラーが出てしまいます。
> パーミッション、Perlへのパスは、間違いなく設定しています。
なんとなくですが、suEXEC問題のような気がします。
使用されているApache2がデストリ標準で、実際にCGIを置いている場所へのアクセスがUserDirを用いたアクセス、即ち、
http://www.aconus.com/~oyaji/aska/aska.cgi
という形態でのアクセスになっているなら、可能性大です。
そうであれば、aska.cgiのページにも載っているように、パーミッションをsuEXECモードで設定してみてください。即ち
aska.cgi : 701
askalog.cgi : 600
jcode.pl : 600
lockディレクトリ : 701
です。suEXEC環境では、パーミッションでアクセス権限をユーザ以外に与えると動作しません。
因みに、ログファイルの拡張子がcgi になっているのは、大いに意味があり、.logとか.datにしておくと、httpでアクセスすると中身が丸見えになってしまうので、敢えて、.cgiにしているのです。こうすると、Apacheはcgiとして実行しようとして、結果として500エラーになり中身をみることができないからです。但し、ファイルの存在はバレバレですが。
このあたりについては、FAQのCGI関係の6項を参照してください。いろいろな対策方法が考えられます。
> 因みに、ログファイルの拡張子がcgi になっているのは、大いに意味があり、.logとか.datにしておくと、httpでアクセスすると中身が丸見えになってしまうので、敢えて、.cgiにしているのです。こうすると、Apacheはcgiとして実行しようとして、結果として500エラーになり中身をみることができないからです。但し、ファイルの存在はバレバレですが。
> このあたりについては、FAQのCGI関係の6項を参照してください。いろいろな対策方法が考えられます。
拡張子をcgiにするのは、そのような意味があったんですか。勉強になりました。
ご指示頂いたパーミッション試してみたんですが、結果はエラーが出てしまいました。
User Dirではなく、Document root(?)に置いてあります。
いろいろ試してみたところcgiだけでなく、htmlファィルでもリンクがおかしく、「../***.html」や「./***html」
「image/***.jpg」といった部分が正常に機能しておらず、同一のディレクトリにすべて置いて「***.html」や
「***.jpg」と言った具合に記述しておかないとだめなのです。
また、同一ディレクトリ内でのリンクでも、間違いなく存在しているんですがたまにファイルが見つからないとエラーが出てしまいます。そして、しばらくしてもう一度試すと今度は表示されたりします。
OSをインストールしなおした方が良いかなと考えております。
最後になりましたが、おやじさんアドバイスありがとうごさいました。