dポイントプレゼントキャンペーン実施中!

掲示板のスクリプトを作っています。
ログは1行ごとに1記事分のデータが格納されているので、書き込み処理の場合は、
$lines = file("./log.dat");
としていったん配列にログを読み込み、

array_unshift($lines, $new_data);

等して、新しい記事のデータを配列の先頭に追加し、

$fp = fopen("./log.dat", "wb");
foreach ($lines as $line) {
fputs($fp, $_);
}
fclose($fp);

として、最終的にログに書き込みます。

Perlを扱っているときは(複数更新すべきログファイルがあったので)、別途ロックファイルを作ってそれに対してflockをかけるという方法を行っていましたが、今回はログファイルが1つであるのでそのログファイル自体にflockをかけようと思っています。

しかし、fileで最初にopenしているため、ファイルポインタが取得できず、flockをかけるタイミングは、本当の書き込み作業の部分(fopen)からかけるしかなさそうなのですが、これは危険ではないでしょうか?

それと、マニュアルに、
注意: flock()は、ファイルポインタを必要とするため、 (fopen()へ引数"w"または"w+"を指定して)書き込 みモードでオープンすることにより丸めるファイルにアクセス保護する 特別なロックファイルを使用する必要があるかもしれません。

とかいてありますが、この意味がいまいちわからず、困惑しています。

A 回答 (1件)

 はい。

おっしゃるとおり、危険です。

 それから注意点のところは、要するに「ロックファイルは別に作れよ」ってことです(笑)
    • good
    • 0
この回答へのお礼

なるほど、ありがとうございました。

file()を使わずに配列に入れるか、ロックファイルを作るか迷うところですが、参考になりました~

お礼日時:2004/10/13 20:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!