【问题标题】:file_put_contents not overwriting the file?file_put_contents 没有覆盖文件?
【发布时间】:2013-11-09 17:21:32
【问题描述】:

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

【问题讨论】:

  • 试过你的代码。对我来说很好。
  • This answer on SO 可能会有所帮助。还要检查文件权限。

标签: php


【解决方案1】:

在尝试写入内容之前使用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
}

【讨论】:

  • 这对我来说也失败了
  • // FAIL 更改为能给你一些反馈的东西,这样你就知道file_put_contents 是失败了还是is_writablechmod 函数失败了。如果晚于您需要通过命令行 (ssh) 或通过 FTP(更改权限)对文件进行 chmod。
【解决方案2】:

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

Update JSON file with PHP

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2017-08-15
    • 2018-04-25
    • 1970-01-01
    • 2023-03-05
    • 2021-02-02
    • 2013-05-01
    • 2017-02-13
    • 2016-04-22
    相关资源
    最近更新 更多