CGI-BBS > SSI > SSI > 自宅サーバーでSSIを実行できない


(株)友林堂
(株)友林堂


データ復旧§即日§ino データ復旧‐テラステーション‐修理‐ino

質問者 なみだ  投稿日 1/23(木) 22:48:45
SSIの過去ログで同じような書き込みがあったので、
実行してみたのですが、なかなかSSIが実行できずに困っています。

<!--exec cmd="cgi-bin/test.cgi"-->
これで実行するとまったく値が返ってきません。
そこで、過去ログに書いてあった
<!--#include virtual="cgi-bin/test.cgi"-->
これでやると、一応値は返ってきました。

#!/usr/bin/perl
print "abc";

実行結果↓
abc

しかし、下記のソースを実行するとエラーがでてきます。
#!/usr/bin/perl

open(FH,"<cnt.txt");
$cnt = <FH>;
close(FH);
$cnt--;
open(OU,">cnt.txt");
print OU $cnt;
close(OU);

if ($cnt == 0) {
	print "在庫は0です。";
}
else {
	print $cnt;
}

このようなエラーがでます。↓
an error occurred while processing this directive

cnt.txtの数字は実行毎に減っているのですが、エラーが出てブラウザに表示されないのです。

環境はApache2.0.40
サーバーLinux
Apacheの設定でSSIの実行はできる設定にしたはずです。
因にWindowsサーバーでは実行できました。
Apacheの設定が悪いんですかね・・・

プロバイダ参照:
サーバのOS:(未選択)
パソコンのOS:(未選択)
エディタ:
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:(未選択)

回答者 しあわせのツボ  [削除]  投稿日 1/23(木) 23:54:04
まずtest.cgiを単体で実行してエラーが出ないか確認してください。

推測ですが、cnt.txtが読み書きできないのではありませんか?
パーミッションが与えられていないとか。
質問者 なみだ  [削除]  投稿日 1/24(金) 00:06:57
しあわせのツボさんお返事ありがとうございます。
単体で実行してみようと、
print "Content-Type: text/html\n\n";
を入れて念の為もう一度SSIを実行してみたらできました!
これ、いるんですね(笑)
初歩的な質問で失礼しました。
そして、ありがとうございました。

<!--exec cmd="cgi-bin/test.cgi"-->で実行できないのに、
なぜ<!--#include virtual="cgi-bin/test.cgi"-->で実行できるんでしょうか?
やっぱりApacheの設定ですかね?
回答者 しあわせのツボ  [削除]  投稿日 1/24(金) 12:24:40
最近のhttpdは「SSIは許可するがexecはダメ」という設定が可能なので、
どこかにその設定が残っているのではないでしょうか。
Apache2.0は私もまだよくわからないので、具体的にどことは言えないのですが。

もっとも、セキュリティの都合上execはあまりよろしくないので、
includeで代替できるなら設定を変更せずincludeで運用した方がいいと思います。
# デフォルトがそうなっているのもそれが理由でしょうし。
質問者 なみだ  [削除]  投稿日 1/24(金) 12:30:26
う〜ん、やっぱりApacheの設定ですね。

>もっとも、セキュリティの都合上execはあまりよろしくないので、
>includeで代替できるなら設定を変更せずincludeで運用した方がいいと思います。
そうですね。
問題なければこのままにしておきます。

ありがとうございました。

このページは終了したので返信(回答)は書きこめません
 


データ復旧§即日§ino データ復旧‐テラステーション‐修理‐ino Web裏技