PHP file_put_contents无法使用777权限和Apache权限

时间:2014-07-22 09:48:47

标签: php json apache permissions 777

我目前正在尝试使用file_put_contents来更新我的JSON文件。这就是我目前的PHP:

$result = file_put_contents('Resources/logs/file.json', $newJsonString);
if($result === true) {
    echo "true";
} else {
    echo "false";
}

但是,它始终返回false。不过,我已将目录权限设置为777,分别用于Resourceslogs。我还为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

3 个答案:

答案 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";
}