shell 上ではうまく動くスクリプトなのに、Web 上ではうまく動かないのですが?
[上に]
[前に]
[次に]
IMO
[E-Mail]
1998/04/08(水) 14:21:54
今、掲示板を設置しようとしています。それで、そのスクリプトが、
shell 上で走らせると、エラーは出ないのですが、Web から走らせると、
メッセージを書き込んで送信したときに、
500 Internal Server Error
と表示されてしまいます。しかも、そのページを再読み込みすると、
今書いたメッセージが表示されるんです。一体なんででしょう?
エラーを出さないためにはどうすればよいのですか?
ちなみに、私のプロバイダーのサーバは、NCSAで、
ヘッダのあとには、一行改行もあるし、\n\n も最後に付けています。
また、サーバに .htaccess ファイルに以下のことを書き込めといわれたので、
書き込みもしたのですが、、、
Options Includes ExecCGI
AddType application/x-httpd-cgi cgi
<Limit PUT GET POST>
order deny,allow
allow from all
</Limit>
その時に、設置ディレクトリはスクリプトに依存するといわれたので、
もしかしたら、それがカギなのかもしれません。
どうか、教えて下さい。
B-Cus
1998/04/08(水) 17:21:52
ひとつひとつ解決していきましょう。
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "test ok.\n";
このCGIを実行させられますか? ダメならパーミッションを
見直してください。
BBSがどうこうというのは、これが動いてからの話です。
IMO
[E-Mail]
1998/04/08(水) 23:11:34
B-Cus さんの書いていたスクリプトは問題なく動きました。
(ブラウザに test ok. って出ればいいんですよね)
それで、今FTPしたときにちょっと気になったのですが、私のプロバイダは
ファイルが来ると、勝手にパーミッションを644にしてしまうみたいなんです。
だから、掲示板のログファイルを書き換えるときに、パーミッションが644に戻って
しまうからなような気もします。
もしそうならば、どうやればこの設定を変えられるか、教えて下さい。
B-Cus
1998/04/09(木) 04:08:46
ということはCGIの実行はできているということで、.htaccessは
関係ないわけですね。
> ファイルが来ると、勝手にパーミッションを644にしてしまうみたいなんです。
> だから、掲示板のログファイルを書き換えるときに、パーミッションが644に戻って
> しまうからなような気もします。
それはないと思うけど…。
最初はログファイルは777にしたのだけれど、CGIを実行すると
644になる、とおっしゃりたいわけでしょうか。
nobody権限で実行した場合、ファイルのオーナーのからみで
パーミッションを変更することはできないと思います。
所有者の権限で実行した場合は、ファイルを一度消して
再び書き込んむのなら644になってしまうかもしれませんが、
それはそれで問題ないわけです。だって所有者の権限で
read,writeできるんだから。
コマンドラインから実行できるのにCGIで実行できない
となれば、まずはPATHでしょう。スクリプト中で
system("foo")とか`bar`('…'じゃなくて`…`ね)とか
open(OUT,"|hogehoge")とか書いてあるところはありませんか?
そのコマンドをフルパスで書いてみましょう。
例えばopen(OUT,"|sendmail")をopen(OUT,"|/usr/sbin/sendmail")
とか。
あとはパーミッションですかね。nobody権限で動かす場合、
ディレクトリやファイルは777などになっていますか?
もちろんCGIが読み書きする全てのファイルについて、です。
ところで、どこのどんなCGIを設置しようとしているんですか?
IMO
1998/04/09(木) 14:08:02
まず、PATH のことですが、関数(?)($ のついたもの)で、
一応全部書かれてありました。でも、ものによっては、
相対パスだったり、絶対パスだったりしていたので、統一したほうがよいのでしょうか?
(もし統一するならば、どちらの方が、よいのでしょうか?)
それと、パーミッションのことなんですが、やっぱり一度書き込んだら、
ログファイルが644に戻っていました。しかも、所有者が私ではなく、www で。
もともと、パーミッションが666ということは、誰でも、そのファイルを
書き換えられるってことですよね。だから、外部からブラウザを通してアクセスしてきた人も
その人の名義(この場合は www)で新たにファイルを作ってしまい、
その時にパーミッションもデフォルトの644に戻ってしまうからのように思われます。
素人の考えなので、当たっているかどうかは分かりませんが。
でも、仮にそうならば、どうしたらよいでしょうか?(大きな声じゃいえないのですが、
ウチのプロバイダーは、基本的にCGIやシェルの質問を受け付けてくれないようですので)
あ、設置しようとしている掲示板は、浜ちゃん(すいません、URLは忘れてしまいましたが、
Yahoo で検索できました)の「掲示板v5」というものです。
B-Cus
1998/04/09(木) 15:16:37
> まず、PATH のことですが、関数(?)($ のついたもの)で、
> 一応全部書かれてありました。
$sendmail = "/usr/sbin/sendmail";
のような書き方ってことですね。すべてこういう書き方に
なっているなら、パスは問題ないでしょう。
相対パス、絶対パスは統一する必要はないと思います。
> それと、パーミッションのことなんですが、やっぱり一度書き込
> んだら、 ログファイルが644に戻っていました。しかも、
> 所有者が私ではなく、www で。
なるほど。おそらく777のディレクトリの下にあるファイルを
一度消してからまた作っているのだと思います。とはいえ、
パーミッションは問題ないのかもしれません。だって所有者が
wwwでパーミッションが644ならwww君はread,writeできるんですから。
とはいえ、書き込み時にエラーになってその後はうまくいくのなら、
やっぱりパーミッションの問題のような気もします。
どういうBBSなのか知らないし(このラウンジ風なのか
それとも一つの書き込みでファイルを一つ作るのかなど)、
スクリプトも手元にないの、これ以上はなんとも言えません。
# 配布元のURL教えてくれたら何か言えるかもね;-)
> ウチのプロバイダーは、基本的にCGIやシェルの質問を受け付けて> くれないようですので
そんなもんです。僕がプロバイダのサポートだったとしても、
CGIのサポートは絶対やりたくないですから(笑)
IMO
1998/04/09(木) 16:02:29
[[解決]]
不思議なもので、友達などにも頼んで試してもらった結果、
うまくいくようになりました。いまだにどこかが悪くてダメだったのか、分かりませんが、
なんとか無事につながっております。
またトラブルが起きたら、このラウンジに質問を出すかもしれませんが、
当面は動くように思われます。
どうもありがとうございました。
[上に]
[前に]
[次に]