【问题标题】:PHP JSON file_put_contents blankPHP JSON file_put_contents 空白
【发布时间】:2014-07-21 12:26:31
【问题描述】:

这是我当前的 JSON 文件:

{"coins":"0","uses":"0"}    

...我用以下 PHP 重写了这些值:

$data = json_decode(file_get_contents('test.json'), true);
$data["coins"] = iconv($data["coins"] + $coins);
$data["uses"] = iconv($data["uses"] + 1);
file_put_contents('test.json', json_encode($data));

我已打印出$data 的值,并看到它包含新值。然而,file_put_contents 写入的文件始终是空白的。关于为什么会这样的任何建议?

编辑:

这是$data 返回的内容:

Array ( [coins] => 100 [uses] => 1 )

稍微修改一下我的代码后,file_put_contents 似乎返回了false。不过,我已将文件权限设置为 777 (test.json)。

【问题讨论】:

  • file_put_contents() 调用的返回值说明了什么? true 还是 false?我假设false 在大多数情况下会导致系统为运行 PHP 的用户授予的写入权限不足。
  • 您可能缺乏对目标文件/目标的写入权限?
  • @TiMESPLiNTER:权限不足不可能是问题的根源,因为文件被打开了,之前的内容被删除了。
  • @up 不,你是对的,因为 iconv 的使用错误。 $data 可能包含 null,因为“iconv”使用错误,json 结构可能格式错误,json_encode 可能返回 null。 null 可以评估为 php 中的空字符串,因此 file_put_contents 可能会覆盖整个内容,因为如果缺少参数标志,则未设置 FILE_APPEND 标志。
  • 正如时间分裂所指出的那样。 $data 包含数据,file_put_contents 返回 false,这肯定是权限问题。请检查 php 用户是否对该文件有写权限。

标签: php json


【解决方案1】:

不需要iconv(),应该这样做:

$data["coins"] = $data["coins"] + $coins;
$data["uses"] =$data["uses"] + 1;

如果你转储你会看到的对象:

array(2) { ["coins"]=> string(1) "0" ["uses"]=> string(1) "0" }

它们是字符串,因为在您的 json 中,数字周围有引号。

如果有什么你可以转换 (int)$data["coins"] 但幸运的是 php 足够聪明,可以转换为正确的数据类型。

iconv()更多用于转换字符串编码。

【讨论】:

  • 我刚从其他好人那里了解到这一点 :) “这并不能提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留言。”
  • 是的,那条评论完全展示了我的 PHP 知识;)你是对的 :)
猜你喜欢
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多