我有收到一个文件名和一个JSON对象写入一个文本文件中的函数。
该对象被更新,需要完全替换文件的当前内容。 每个网站访问者都有自己的文件。 多的快速变化创造一个文件被截断的情况下fopen(file,w+)
则不会被写入,因为它是锁着的。 最终的结果是空文件。
我敢肯定有一个标准的根本办法做到这一点,因为它是这样一个平常的活动。 理想的情况是什么,我要的是来检查文件是否已截断与文件之前锁定的方式fopen
在w+
模式或方式来切换模式。
这似乎很奇怪,你将不得不截断与文件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;
}
}