私はファイル名の配列を持っており、各プロセスは単一のファイルのみを作成して書き込む必要があります。
これは私が来たものです:
foreach ($filenames as $VMidFile) {
if (file_exists($VMidFile)) { // A
continue;
}
$fp = fopen($VMidFile, 'c'); // B
if (!flock($fp, LOCK_EX | LOCK_NB)) { // C
continue;
}
if (!filesize($VMidFile)) { // D
// write to the file;
flock($fp, LOCK_UN);
fclose($fp);
break;
}
flock($fp, LOCK_UN);
fclose($fp); // E
}
しかし、私が頼っているのは好きではありませんfilesize
。
別の(より良い)方法でそれを行うための提案はありますか?
UPD:簡単に話し合うためのラベルを追加しました
UPD 2:現在のスレッドがファイルを作成したfilesize
かどうかを確認する他の信頼できる方法が見当たらないために使用しています(したがって、ファイルはまだ空です)
UPD 3:ソリューションはコンディションレースフリーである必要があります。