- ベストアンサー
flock関数を使わない類似した掲示板
こんにちは。 現在サイトを立ち上げて掲示板を設置しようと考えています。 http://park8.wakwak.com/~da101/other/heppokobbs/bbs.html 色々探した結果上記のスクリプトが気に入ったのですが、 此方が利用しているサーバでは flock関数が使えないとの事で利用出来ませんでした。 上記の物を改造出来れば一番良いのですが、 残念ながら自分にはperlの知識は殆どありません。 そこで無茶なお願いですが、 上記の様な形式のflock関数を使わない掲示板を 教えて頂けませんでしょうか。 宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
時間が出来たので試してみました。 結論から云えばそのままで動作しました。 配布元の説明を参考にアップすると 確かに「ファイルがロックされています」と表示されます。 で、lockdirのフォルダをbbsフォルダの中にして、 その中にlockfileを入れると正常に動作しました。 つまり、フォルダやファイルの位置が間違えていたと云う事になりますね。 パーミッションは、 lockdir [777]、lockfile [664]or[666] lockfileはどちらでも良いようです。 dinit.cgiの修正をお忘れ無く。 管理人パスワードなどの設定がありますので。 私が試したのはinfoseekですが、 多分、他サーバでも動作すると思います。 久しぶりに、perlのコードをマジマジと見ました。 結構忘れているんだなぁ・・・と自分自身に感心(^^;; でも、良い気分転換&勉強になりました。 参考になれば幸いです。
その他の回答 (5)
- kiki_s
- ベストアンサー率59% (147/248)
サーバ運営会社が分からないという事であれば、 致し方ないです。 777.666でも駄目という事ならば、 perlの書式の問題でもありますね。 >サブルーチンを呼び出している部分をコメント化し、 その通りです。 ただし、ファイルロックが無くなりますので、 同時に書き込みなどをするとログが壊れる可能性はあります。 それ以前に、呼び出し部分を無効化して正常動作するかの問題もあります。 現在動作してる他のCGIがあるとの事ですが、 それらにはファイルロックが無いのでしょうか? d-bbsのファイルロック部分は数カ所しかありませんので、 ファイルロック部分を入れ替える方法が一番確実かも知れません。 私自身も試せればいいのですが、 何せ時間が無く、perlからもしばらく離れていますので、 ほとんど覚えていないんです。
- kiki_s
- ベストアンサー率59% (147/248)
lockdirフォルダとlockfileのパーミッションはどうなっていますか? また、契約されているサーバーは大手? それとも地方サーバでしょうか? 無料サーバなどでも、lockdirフォルダは「777」、 lockfileは「666」なんて事もあります。 これはこれで危険なんですけどね。 どうしても書き込みが出来ない場合ですが、 スプリクトを修正するしか方法は無いでしょうね flockの部分で引っ掛かっているのかも知れません。 dbbs.cgiのスプリクトの最後あたりに、 「sub my_flock」と「sub my_flock」がありますが、 これはサブルーチンですのでそのままにしておいて、 「my_flock」と「my_flock」がサブルーチンを呼び出している部分ですが、 これらをコメント化するとどうなるかです。 my $lfh = my_flock()~とか、 my_funlock($lfh)とか 検証していませんので何とも云えませんが・・・
お礼
何度も御助言本当にありがとうございます。 lockdirフォルダは777、lockfileは664です。 777.666でも試しましたがやはり無理でした。 サーバは私自信が借りた物ではなく、 上の者が借りた物の一部を使わせて貰っている形なので、 詳しい事は分かりません。すみません。 言い訳がましい様ですが、 私perlの知識は殆ど無いもので… 素人の理解ですが、 「sub my_flock」と「sub my_funlock」の サブルーチンを呼び出している部分をコメント化し、 その呼び出しを一時的に無効化して正常に書き込めるかどうか、 という事ですか?
- kiki_s
- ベストアンサー率59% (147/248)
>"ERROR! ファイルがロックされています。" >と出てやはり正常に利用する事が出来ませんでした。 書き込みはともかく、表示のみなら基本的には動作する訳ですね? スプリクトの内容までは未確認ですので、 何とも言い難いですが、 同じperlでも環境によって動作しない場合もあります。 >パーミッションは配布サイトの通りに設定しました。 パーミッションはサーバーによって違いますので、 配布元が正しいとは限りません。 独特な設定値をするサーバもあります。 お使いのサーバのパーミッションを確認する必要があります。
お礼
御助言ありがとうございます。 はい。表示だけはcss等もきっちり読み込み 全く問題無く動作します。 パーミッションは現在動作してる他のCGIと併せつつ、 確認してみましたが恐らく問題は無いと思われます。
- kiki_s
- ベストアンサー率59% (147/248)
RSS出力機能付き掲示板ですか? d-bbs Ver.0.19c 最近増えていますね、こういうの。 で、ざっと見ただけですが、 本来のflock関数は使っていないようです。 ANo.#1さんの書かれた「ファイルによるロック方法」で実現しているみたいです。 本来のflock関数(排他的制御)もファイルによるロック方法も 総称してflockと呼ばれているようですね。 本来、perlに実装されたflock関数が無ければ無理ですが、 ファイルによるロック方法の疑似flock関数なら大丈夫じゃないでしょうか? あとは、Perlのパス指定、jcode.pl(ライブラリ)の有無、 パーミッションなどの問題がありますけど。
補足
御助言ありがとうございます。 そうです。その掲示板です。 どうやら私がflockなるものを しっかり理解出来ていなかったようですね。 すみません。 とりあえずサーバに上げてみましたが、 CGIは一応動作するのですが、 試験的に書き込もうとすると、 "ERROR! ファイルがロックされています。" と出てやはり正常に利用する事が出来ませんでした。 perlのパスは他CGIは動作しているので、間違いないと思います。 上げたjcode.plを削除してみた所 CGIは動作しなくなりましたので、 jcode.plは正しい場所に上げていると思います。 パーミッションは配布サイトの通りに設定しました。 私としてもこのスクリプトが使えれば、 良いに越した事は無いのですが中々難しいですね。
- mobt
- ベストアンサー率50% (7/14)
以前同じようなことで悩んだことがあります。 知識が無かった頃は、flockを完全に消して 運営してましたが、訪問者も少なく、それほど読み書きもしなかったので、問題はありませんでした。 そもそもflockというものは同時刻にプログラムにアクセスされたときにパニックしてしまうものだと考えてよいと思います。 もし、どうしてもflockの変わるものを使いたいなら ファイルによるロック方法が簡単かと思います。 これは、 openのあとのロックに lockというファイルがあるか見に行きます。 もしなければ lockというファイルを作成し あれば sleep で一時停止した後 もう一度みにいきます。 lockファイルがある間に ファイルに書き込みを行い おわったらlockファイルを消す。 というものです。
お礼
御助言ありがとうございます。 私も最初にそれを考えました。 しかしログが破損するのは、 やはり痛いので念には念を入れて行きたい所です。 削るだけならどうにか私にも出来るのですが、 継ぎ足すとなるとやはり難しいものがあります。 しかし原理は大体把握出来ました。ありがとうございます。
お礼
何度も本当にありがとうございます。 わざわざすみません。 こちらのサーバでも試してみた所、 正常に書き込むことが出来ました! 設定等も済ませて早速実用化して行きたいと思います。 今回の件ではお世話になりました。 正直質問当初はこのスクリプトは諦めていたのですが、 貴方の助けのお陰で利用出来る形まで持って行く事が出来、 感謝の気持ちでいっぱいです。 本当に助かりました。ありがとうございました。