我目前正在尝试使用file_put_contents
来更新我的JSON文件。这就是我目前的PHP:
$result = file_put_contents('Resources/logs/file.json', $newJsonString);
if($result === true) {
echo "true";
} else {
echo "false";
}
但是,它始终返回false
。不过,我已将目录权限设置为777,分别用于Resources
和logs
。我还为file.json
设置了777的文件权限。
路径也是正确的,因为file_get_contents
使用来自同一文件的相同路径。
要进一步证明我的观点,我还运行了sudo chown -R www-data:www-data /var/www/html/core/Resources/
来授予用户{{}要写入的目录Resources
(以及其中的所有内容)的权限。 1}}(我假设它允许通过在线运行PHP脚本来写入JSON文件)。
我不知道这是否有用,但我也通过从其他服务器/网站通过JavaScript向其发送www-data
数据来运行此PHP脚本。
为什么世界上POST
仍然返回false而不是写入文件?它总是使JSON文件在运行后变为空白。
补充代码:
这是整个代码块,包括file_put_contents
部分:
file_put_contents
...这是JSON文件:
$jsonString = file_get_contents('Resources/logs/file.json');
$data = json_decode($jsonString);
$data->coins = $data->coins + $coins;
$data->uses = $data->uses + 1;
print_r($data);
$newJsonString = json_encode($data);
$result = file_put_contents('Resources/logs/file.json', $newJsonString);
if($result === true) {
echo "true";
} else {
echo "false";
}
任何帮助都会受到高度赞赏,我一直试图解决这个问题一整天。
修改1:
我忘了提这个,但是这个代码昨天工作得很好,大约一个小时。然后它突然停止工作并开始将JSON文件留空。
编辑2:
我刚刚清除了Apache错误日志,以及它再次运行的脚本(这很好)。但是,{"coins":"0","uses":"0"}
仍在返回file_put_contents
。发生了什么......
编辑3:
感谢Laurent Wartel,我更新了false
的if语句,似乎不再返回false。
file_put_contents
答案 0 :(得分:1)
尝试将字符串写入您的文件。这样,您可以确定问题是存在于文件写入还是内容生成上:
file_put_contents('Resources/logs/file.json', 'Hello, file');
另外,我在文件写入调用中添加了一个LOCK_EX标志,以确保您没有遇到并发问题。
答案 1 :(得分:0)
来自文档PHP: file_put_contents - Manual
此函数返回写入的字节数 文件,或失败时为FALSE。警告
此函数可能返回布尔值FALSE,但也可能返回a 非布尔值,其值为FALSE。请阅读有关的部分 布尔值获取更多信息。使用===运算符进行测试 返回此函数的值。
修改你的代码......
if($result === false) {
echo "Error";
} else {
echo "All good, $result bytes written";
}
答案 2 :(得分:0)
http://php.net/manual/en/function.file-put-contents.php
此函数返回写入文件的字节数,或者失败时返回FALSE。
您无法使用相同的比较运算符来检查是否成功。这两种选择都是有效的:
if($result) {
echo "true";
} else {
echo "false";
}
或
if($result === false) {
echo "false";
} else {
echo "true";
}