【发布时间】:2012-10-13 21:27:19
【问题描述】:
我有一个函数,它接收文件名和 json 对象以写入文本文件。
对象已更新,需要完全替换文件的当前内容。每个站点访问者都有自己的文件。多次快速更改会导致文件被fopen(file,w+) 截断,然后在锁定时不写入。最终结果是空文件。
我确信有一种标准的简单方法可以做到这一点,因为这是一种常见的活动。理想情况下,我正在寻找一种在w+ 模式下使用fopen 截断文件之前检查文件是否有锁的方法或切换模式的方法。
您必须使用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;
}
}
【问题讨论】:
-
你为什么不为此使用数据库?
-
从另一个接管项目,已经在处理文件。可以将其重新编码以使用数据库,但在重新设计之前尝试查看是否有其他解决方案。