- ベストアンサー
データのサイズをチェックするCGIは見つけられるか?
- 指定したサーバーにある任意のファイルのファイルサイズをチェックし、0バイト以上かどうか調べる方法が知りたいです。
- 指定ログファイルのデータのサイズを読み取り、そのログが0バイトでなければ「入室者あり」と判断できるCGIを探しています。
- タイムスタンプを見て更新日を表示するCGIは見つかるが、データのサイズをチェックするCGIは見つけられませんでした。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No3での回答は「絶対パスが使えない」の記述から、プログラム設置場所が全然異なるものを対象にしようとしていたのかと早合点したのですけど、 niftyなら私もホームページスペースを持っていますので、経験者としてさらなる解説を試みてみます。 1.「絶対パス」は使えます。ただ、絶対パスのルートディレクトリーを勘違いして使えないと思っている方は結構おられるようです。 ftpソフトで / を指定して自分のホームページスペースを開くと /cgi-bin /homepage の2つのディレクトリーが見えますよね(他のディレクトリーはユーザーには使えないから無視) このディレクトリー表示が実行中のcgiから見た絶対パスとなります。 よって、御記載のチャットデータファイルは /cgi-bin/x/01.ent としてアクセスします。 dream.cgiでは以下の指定 dream.cgi?size=/cgi-bin/x/01.ent 応用 /homepage内のファイルも更新時刻やサイズ表示出来ます。 例 サイトトップの更新日表示 dream.cgi?file=/homepage/index.html 2.数値用画像は、cgiで読み込むものについては、/cgi-bin内に置き、相対パス指定で読み込みます。httpからの絶対URI指定は、imgタグや背景画像のURIに指定するときのことであり、cgi読込用とは意味が違います。 3.pcheck.cgiもエラーってことは、cgiファイルのアップロード時のモードを間違ってバイナリーにしていませんでしたか? もう一度、アスキーモードでアップロードし直してみて下さい。 niftyのホームページスペースは、cgiエラーの内容を教えてくれる機能がないのでこういうときはなかなか原因究明が大変ですよね。 4.「他のプログラムで上書きモードでopen中のファイルはサイズ0に見える」 これは、niftyがunix系サーバーなので、しょうがないですね。 ご利用のチャットプログラムでは、同時上書き防止の為にどういった実装をしているのでしょう? それにあわせたプログラムを書かないと、単純にdream.cgiでサイズを調べだけでは無理のようですね。 私も、そこまで考え至っておりませんでした。よけいな混乱を招いたようで済みません。 チャットの本体を調べるところまでは時間が取れないので、とりあえずの回答をしておきます。
その他の回答 (3)
- hrm_mmm
- ベストアンサー率63% (292/459)
チャットプログラムって、自分で設置した物(=夢カウンターなどを設置するのと同じサーバー領域内に設置)ではなくて、レンタルなどのお仕着せチャットなのですか? サイズを知りたいファイルが、cgi実行ファイル領域から見えない(=相対パスや絶対パスでアクセスできない、またはアクセス制限がかかっている)ところにあるなら、socket通信など簡単ではない技術が必要になります。単なる01フラグの問題では無くなります。 サーバー構成が解らないのでこれ以上は何ともいえません。
お礼
お忙しいところコメント有難うございます。 チャットプログラムは多くのHPでも設置されている[ネットサーフレスキュー[Web裏技]]さんの2SHOT-CHATを、 NIFTY-Serveのホームページに設置しています。 これにCGIROOMさんの keepout を組み込み、直でのチャットプログラムの呼び出しを禁止し、更にパスワードでアク セス出来るCGIを合わせているのですが、これらのCGIは問題なく動いています。 お教えいただいた 夢カウンターも試しに設置したのですが、どういうわけかサーバーエラーが出て動きませんでした。 (エラーの内容は、実行出来ないと表示されるだけです) 勿論1行目のperlの設定など、動いている他のCGIに合わせましたが、パスを調べる check.cgiも動かない状態です。 NIFTY-Serveの制限で、画像など使う場合、http:// からの指定が絶対なため、夢カウンターはダメなのかな?程度の 解釈しか出来ないのですが、check.cgiさえも動かないということは、パスに関する動作をNIFTY-Serve側が制御して いるのでしょうか。 >cgi実行ファイル領域から見えない 私は全くの素人ですので、ご専門の方に上手く説明できずに申し訳ないのですが、cgi-bin 以下(フォルダ)に ログファイルが設置されています。(配布されているデフォルトの設置構成のままです) ですが当然、そのファイルを直接URLでブラウザに打ち込んでも、表示する事は出来ない場所です。 |-- 2shot.cgi <755> |-- jcode.pl <644> | |--/x/ (データ格納フォルダ) <755> | |-- 01.ent <666> ←このファイルの チャットルームに誰かがいれば 01.ent 等のファイルサイズが 0 以外になりますので、素人考えながら単純に 「サイズを調べれば…」と考えてしまった次第です。(オープンされているファイルに他からのアクセスが許可 されるのか?という難しい話しになってしまいそうですね)
- hrm_mmm
- ベストアンサー率63% (292/459)
「HTMLメッセージ」を表示するにはSSIで呼び出す必要がありますけど、そこのところ理解されていますでしょうか? SSIを実行出来ない場合は、通常、cgi結果は画像で出力して、html内にはimgタグで呼び出しというように、画像カウンターと同じ技術を使うことになります。 http://www.kent-web.com/ で配布されている夢カウンターというものに、指定ファイルのサイズを数値画像で表示する機能がありますけど、これではご不満ですか?
- 参考URL:
- http://www.kent-web.com/
お礼
hrm_mmmさん、コメント有難うございます。 確かにブログなどではSSIの実行を許されている所は無いでしょうから、カウンターのような方法になるのだと思いますが、CGI自体を設置するサーバーが「/」からのフルパスを認めていない仕様で、お教えいただいたCGIは動くのですが、数字が表示されませんでした。(逆にカウンターCGIの方が http からのパス指定が出来ないようで) 説明を読ませていただいたところ、応用しだいでは?と期待したのですが残念です。元々、0か1のフラグを立てるような簡単な事ですから、逆に配布がないのかもしれないですね。
- sakusaker7
- ベストアンサー率62% (800/1280)
CGIを記述しているプログラミング言語は何ですか? perlでいいなら、 if (-s チェックするファイルのフルパス名) { ファイルサイズ1バイト以上 } とか if (-z チェックするファイルのフルパス名) { ファイルサイズが0バイト } のように判定できます。 ほかの言語でもファイルのサイズを得ることはできるので、 それで判定してやればいいでしょう。
お礼
sakusaker7さん、RES有難うございます。 はい、ご指摘のperlです。 ただ知識と言ってもあくまで提供していただいているフリーCGIを 自分の好みに多少デザインや動作を変更する程度で、プログラムの知 識は全くありませんので、質問させていただきました。 多分プログラムを作れる方には簡単な仕様だと思いますが、簡単なだ けに、以外とこういうプチCGIの配布ってされていませんので、探 しまくって最終的にこちらに質問させていただいた次第です。 どなたも答えてくれなかったらどうしよう…と不安でしたが、 改めてRES有難うございました。
お礼
hrm_mmmさん、お礼が遅くなって申し訳ありません。 結果から申しますと、どうやっても dream.cgiだけはうまく 動かないです。 お教え頂いたようにパスも色々試しましたが数字が出ない。 これは単純に私の設置ミスかもしれませんので、もう少し 色々試してみたいと思います。 3<については最初ホームページビルダーのFTPソフトを 使っていたのですが、これが自動判別で本当に正しくテキスト モードになっているか確信出来ませんでしたので、別のソフト をインストールして試してみましたが…変化はなかったです。 お忙しいところ、有難うございました。 勉強になりました。