我有一个接收文件名和 json 对象以写入文本文件的函数。
对象已更新,需要完全替换文件的当前内容。每个站点访问者都有自己的文件。多次快速更改会导致文件被截断fopen(file,w+)
,然后在锁定时不写入。最终结果是空文件。
我确信有一种标准的简单方法可以做到这一点,因为这是一种常见的活动。理想情况下,我正在寻找一种在使用fopen
inw+
模式截断文件之前检查文件是否有锁的方法或切换模式的方法。
您必须截断文件fopen()
以获取要传递的文件句柄以flock()
检查它是否已锁定,这似乎很奇怪——但您只是截断了它,那有什么意义呢?
这是我到目前为止的功能:
function updateFile($filename, $jsonFileData) {
$fp = fopen($filename,"w+");
if (flock($fp, LOCK_EX)) {
fwrite($fp, $jsonFileData);
flock($fp, LOCK_UN);
fclose($fp);
return true;
} else {
fclose($fp);
return false;
}
}