【问题标题】:PHP json_encode size limit?PHP json_encode 大小限制?
【发布时间】:2011-05-31 22:44:14
【问题描述】:

我正在使用 PHP 代理来获取文件的内容。我想使用强大的 jQuery 选项搜索该文件,而不必在 PHP 中编写各种查询。这是我的 PHP 代码:

$page = file_get_contents( filter_var( $_POST[url], FILTER_SANITIZE_URL ) );
die( json_encode( $page ) );

如果加载的页面太大,PHP 会读取整个文档,但 json_encoding 只会给出文件的第一部分,而不是整个文件。我找不到关于 json 传递数据的大小限制的任何信息,但显然有一个。

问题:是否有解决方法来防止仅传输文件的一部分?

我需要从其他域中获取文件,因此在 jQuery 中读取文件的内容并不是一个真正的选择。

【问题讨论】:

  • 问题不清楚。 json_encode 可以转换的数据大小仅受可用内存的限制。
  • 您能告诉我们创建并发送到浏览器的 JSON 的最后迹象吗?
  • 您确定不只是达到时间限制(默认 30 秒)吗?试试set_time_limit(0)
  • 如果 $page 只是一个字符串,为什么还要对其进行 JSON 序列化?
  • @Frits van Campen:时间限制他不会收到任何东西,而不仅仅是一部分。

标签: php size limit json


【解决方案1】:

帮助其他可能遇到无法用 json_encode 解释的问题的人。我发现了解 json error msg 函数会有所帮助。

json_last_error_msg();

我遇到了类似的问题,但与文件大小无关。我在数据库中使用了格式错误的 utf-8。你可以像这样检查你的json

$json = json_encode($data);

if ($json)
    echo $json;
else
    echo json_last_error_msg();

这里有 PHP 文档json_last_error_msg

【讨论】:

  • 太棒了!如果我没有看到你的答案,我永远不会想到这一点......
  • 伙计,这太棒了!你为我节省了大量的调试时间!
  • 我可以用 json_encode($data, JSON_INVALID_UTF8_IGNORE) 解决这个问题
【解决方案2】:

PHP 5.3:ext/json/json.c
PHP 7(当前):ext/json/json.c

对 JSON 序列化数据的大小没有内置限制。无论如何都不是字符串。因此,我假设您遇到了 PHP 内存限制或其他问题。

json_encodeing 字符串始终只是添加一些转义和外部双引号。在内部,这意味着内存加倍(临时字符串连接和 utf8_to_utf16 转换/检查),所以我已经遇到了 8MB 字符串的 32MB php 内存限制。但除此之外,json.c似乎没有任意限制

【讨论】:

  • 大小远小于 8Mb。我通过不将内容导入为 JSON 来“修复”它(这只是一种解决方法)。这不是 PHP 内存限制,否则我无法通过绕过 JSON 来“解决”问题
  • @patrick 值得一提的是您如何“修复”它以及您的(解决方法)以帮助将来访问这里的其他人。
  • 就像我上面说的:我通过不编码来修复它
  • ...详细说明'不编码'...我在最后使用了:exit($page),而不是json_encode($page)...事情不需要在这个 AJAX 应用程序中编码,但最初的问题仍然存在......
【解决方案3】:

我解决了类似的情况。 所以,我写在这里。

我的网站也回复了损坏的 jsondata。大约 8MB。

原因是存储没有空闲。 df命令的结果显示“used 100%”。

我删除了一些文件。然后,解决了。

【讨论】:

  • 确实值得检查......在我的情况下,这不是问题,我仍然想知道我遇到的问题来自哪里。这不是内存问题,没有错误。问题仍然存在......
猜你喜欢
  • 2011-12-29
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
相关资源
最近更新 更多