次のような単純なfopen/fwrite()を使用する場合:
$ref = @fopen('/path/to/file', 'x+b'); // returns false if already exists
if ($ref) {
fwrite($ref, 'A');
sleep(5);
fwrite($ref, 'B');
}
スリープ中に他のプロセスがファイルを削除した場合に、ファイルポインタがまだ有効であることをどのように確認できますか?
単純なis_file()チェックを使用することを検討しましたが、別のプロセスがunlink()を実行してから、同じパスで新しいファイルを作成したかどうかはわかりません。
参考までに、ファイルがunlink()されていても、fwriteはtrueを返すようです。
編集:明確にするために、sleep(5)は単なるランダムな時間であり、競合状態の場合は数ミリ秒になる可能性があります。