【问题标题】:JSON saved with file_put_contents() is having its end undesirably cut off使用 file_put_contents() 保存的 JSON 的结尾被意外切断
【发布时间】:2018-02-21 14:42:16
【问题描述】:

我正在尝试将大量 json 数据保存到名为 test.json 的文件中。我正在使用 PHP:

$json = stripslashes($_POST['json']);
file_put_contents("test.json",$json);

数据保存在一行中,但由于某种原因数据没有完全保存。我不确定这是否是 file_put_contents 或 $_POST 的限制。限制似乎是 15,673 个字符。

【问题讨论】:

  • 您是否尝试过回显 $json 以查看它是否包含您认为应该包含的内容?
  • 标题非常具有误导性。

标签: php json


【解决方案1】:

$_POST 大小取决于 php 配置指令 POST_MAX_SIZE,通常设置为 8 MB。

您对 file_put_contents 的请求可能无法在此执行时间内完全处理,从而导致此问题。

或者你可能内存不足。

尝试增加内存限制和 max_execution_time。

【讨论】:

  • 我使用 set_ini() 将 max_execution_time 设置为 0,将 memory_limit 设置为 1000M。 POST_MAX_SIZE 为 1000M。没有变化。
【解决方案2】:

我想通了。我发送的字符串有 & 号,我必须进行 uri 编码,然后在 PHP 端对其进行解码。

JavaScript:

var obj = {firstName:"John & Johnson", lastName:"Doe", age:50, eyeColor:"blue"};
var objStr = JSON.stringify(objStr);
$.ajax({
  type: "POST",
  url: "write.php",
  data: 'json='+encodeURIComponent(objStr),
});

PHP:

<?php
  $json = urldecode($_POST['json']);
  $json = stripslashes($json);
  file_put_contents("test.json",$json);
?>

【讨论】:

    猜你喜欢
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多