使用系统提供的flock函数:
<?php
function ffwrite($filename,$content) {
$file = fopen("$filename","a");
while(1) {
if (flock($file,LOCK_EX))
{
fwrite($file,$content);
flock($file,LOCK_UN);
fclose($file);
break;
} else {
usleep(1000);
}
}
}
?>
或根据创建文件判断其它进程是否在写操作,性能略差,测试1000次20进程写操作慢3%。
<?php
function _fwrite($filename, $content) {
$filename_lock = $filename . '.lock';
while(1)
{
if(file_exists($filename_lock))
{
usleep(1000);
} else {
touch($filename_lock);
$f = fopen($filename, 'a');
fwrite($f, "$content");
fclose($f);
unlink($filename_lock);
break;
}
}
if(file_exists($filename_lock))
{
unlink($filename_lock);
}
}
?>