CGI-BBS > アクセスカウンタ > SSI式カウンタ > パス表記法?


カレッヂ
カレッヂ


質問者 maru  投稿日 9/3(月) 00:06:34
はじめまして.
http://www.tsubaki.sakura.ne.jp/~campus/grooweb/t_counter.shtml
ここのテキストカウンタを使おうとしています.

VineLinuxを使って自分の鯖で動かそうとしています.
Apache1.3.20で,httpd.confはデフォルトなのでドキュメントルートは/home/httpd/html/です.cgiは/cgi-bin/内でのみ実行可能です.
現在のディレクトリ構成は以下です.

  /home/
      |
      +-- httpd /
            |
            |
            +-- html /index.shtml
            |      |
            |      +--data/count.log
            |                  today.cnt
            |                  yesterday.cnt
            |
            +-- cgi-bin/t_counter.cgi

ここでt_counter.cgi内の以下の部分ですが,
//////////////////////////////
## このCGIファイルの名前
$cgifile = './t_counter.cgi';
## データファイルまでのパス(このCGIから見た相対パスで記入)
$datafile = '../html/data/count.log';
## 今日のカウント数の保存ファイルまでの相対パス
$todayfile = '../html/data/today.cnt';
## 昨日のカウント数の保存ファイルまでの相対パス
$yesterdayfile = '../html/data/yesterday.cnt';
//////////////////////////////

このようにするとindex.shtmlで
<!--#exec cgi="/cgi-bin/t_counter.cgi"-->
と呼ぶと,"FileOpenError"となります.
http://211.7.246.70/index.shtml
しかし,telnet上で/home/httpd/cgi-bin/t_counter.cgiを実行すると期待どおりカウンタはあがっていきます.
ブラウザから指定する時とtelnetから実行するのではディレクトリの見え方が違うのでこういう事が起きると思うのですが,色々やってみてもうまくいきません.

$datafile = '../html/data/count.log';
この部分のパス指定はいったいどのようにすればいいのでしょうか?
回答者 しあわせのツボ  [削除]  投稿日 9/3(月) 01:24:00
count.log、及びそこに到達するまでのディレクトリに対するパーミッションは正しく設定されていますか?
コマンドラインからだと実行できてwebサーバ経由だと実行できないのは、ほとんどの場合パーミッションの設定ミスです。
質問者 まる  [削除]  投稿日 9/3(月) 01:47:02
パーミッションを一度,関係するところ777にしてみたら動きました.
今は,ディレクトリは755,ログファイルは666です.全て777にする前もこうしていたはずなのに・・・.
なぜだーー.一日返せー(^^;
こういうパーミッションエラーなどのエラーログはtelnetなどではどのように確認したらいいのでしょうか?
普通のユーザからは実行できて,webからのユーザからはエラーが出る場合.
回答者 しあわせのツボ  [削除]  投稿日 9/3(月) 14:34:39
別ユーザとしてログインできれば早いのですが、自前サーバでない限りそれは難しいでしょう。
「こういう時はパーミッションを疑う」と覚えるのが、結果として楽かもしれません。

現実的には、ファイルオープンのような失敗しやすいコマンドを使う所には必ず「ダメだったらエラー内容を表示」という処理を書いておく、というのが確実だと思いますが、なかなか…(^^;
質問者 まる  [削除]  投稿日 9/3(月) 14:56:15
自前鯖なんですよ(^^:
別ユーザって何で確認すればいいんですかね?
プログラム自体自分で作っていない為よく分かってません.nobody?
設置時の確認の為に是非確認法を教えて欲しいのですが・・・.
回答者 しあわせのツボ  [削除]  投稿日 9/3(月) 15:25:29
設置者とroot以外でログイン可能なアカウントであれば、何でも構いません。所属グループを設置者と別にすれば更に理想的です。
設置後suし、スクリプトを叩いて動けばOKです。
質問者 まる  [削除]  投稿日 9/3(月) 16:55:01
なるほど,ただそれだけでいいんですか,深く考えすぎました.
エラー内容もプログラム内で吐かせないといけないとなると結構難しいですね.
FileOpenErrorならPermissionか,ファイル自体が存在していないかぐらいを吐いてくれると,パスの記述法が問題かどうかぐらい分かるんですけどね.

返信(回答)する


Web裏技