PHP:读取和写回文件时出现问题

时间:2019-09-09 10:25:28

标签: php json file

$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不适合我。

1 个答案:

答案 0 :(得分:1)

问题是ftruncate没有在空文件的开头设置指针。因此,我在ftruncate之后立即添加了rewind($ fh),问题得以解决。