file_put_contents不会覆盖文件?

时间:2013-11-09 17:21:33

标签: php

我正在构建一个带有锁定和解锁门的迷宫式界面的游戏。我有一个JSON文件可以跟踪被锁定的门,但是当新门被锁定时我无法重写它。我正在尝试用PHP编写一个函数来执行此操作,这是我到目前为止所做的:

$jsonString = file_get_contents('info.json');
$data = json_decode($jsonString,true);
$data["doors"][0]["right"] = true;
$newJsonString = json_encode($data);
var_dump($newJsonString);

file_put_contents('info.json', $newJsonString);

var_dump正在生成正确的数据,但file_put_contents实际上并没有更改文件。游戏不会读取新数据,当我手动去检查文件时,它仍然和以前一样。我正在使用我学校的服务器来托管文件所以我不确定它是如何设置的,但我想知道是否有人对我做错了什么有任何想法?

2 个答案:

答案 0 :(得分:2)

在尝试编写内容之前使用is_writable。如果info.json不可写而不是尝试chmod文件权限,则再次尝试写入。

$jsonString = file_get_contents('info.json');
$data = json_decode($jsonString,true);
$data["doors"][0]["right"] = true;
$newJsonString = json_encode($data);
var_dump($newJsonString);

$filename = 'info.json';

// Check if writable, if not chmod and set if successful
$writable = ( is_writable($filename) ) ? TRUE : chmod($filename, 0755);
if ( $writable ) {
    file_put_contents($filename, $newJsonString);
} else {
    // FAIL
}

答案 1 :(得分:0)

如果is_writable测试失败,则缺少写入json文件所需的权限。这可能是因为您尝试写入作为服务器进程(例如var / www)。请参阅底部帖子(完全相同的问题)并尝试chmod 仅用于测试目的。最好不要将文件I / O写入服务器,尝试使用PDO或mysqli。

Update JSON file with PHP