1

我正在构建一个带有迷宫式界面的游戏,带有锁定和解锁门。我有一个 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实际上根本没有更改文件。游戏没有读取新数据,当我手动去检查文件时,它仍然和以前一样。我正在使用我学校的服务器来托管文件,所以我不确定它是如何设置的,但我想知道是否有人对我做错了什么有任何想法?

4

2 回答 2

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
}
于 2013-11-09T17:48:31.660 回答
0

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

使用 PHP 更新 JSON 文件

于 2013-11-09T18:07:31.403 回答