$fh = fopen(PATH_TO_FILE, "r+");
flock($fh, LOCK_EX);
$data = fgets($fh);
$data = json_decode($data, true);
$data['mod_1'] = 1;
$data_write = json_encode($data);
ftruncate($fh, 0);
fwrite($fh , $data_write);
clearstatcache();
flock($fh, LOCK_UN);
fclose($fh);
仅当我自己准备JSON文件时,此方法才有效。问题是,下次我尝试调用此方法时,json_decode()
返回false,文件部分损坏。 json_decode()
无法再解析。
此代码有什么问题?
我的JSON文件内容:
{"mod_1":0,"mod_2": 0}
我只想读取文件,修改其内容并写回文件(覆盖)。我必须使用LOCK_EX
,所以我认为file_put_contents
不适合我。
答案 0 :(得分:1)
问题是ftruncate没有在空文件的开头设置指针。因此,我在ftruncate之后立即添加了rewind($ fh),问题得以解决。