2011-05-31 388 views
10

我正在使用PHP代理来获取文件的内容。我想使用强大的jQuery选项来搜索该文件,而不必在PHP中编写所有类型的查询。这是我的PHP代码:PHP json_encode大小限制?

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

如果加载的页面变得太大PHP会阅读整个文档,但json_encoding它只会给该文件的第一部分,而不是整个文件。我无法找到关于json传递数据的大小限制的任何内容,但显然有一个。

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

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

+0

文档的问题是不明确的。 'json_encode'可能转换的数据大小仅受可用内存限制。 – zerkms 2011-05-31 22:47:53

+0

您能否给我们提供创建并发送给浏览器的JSON的最新迹象? – Tadeck 2011-05-31 22:48:38

+0

你确定你不只是达到时间限制(默认30秒)吗?尝试'set_time_limit(0)'。 – Halcyon 2011-05-31 22:48:51

回答

7

帮助其他人可能遇到无法用json_encode解释的问题。我发现它有助于了解json错误信息功能。

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

10

PHP 5.3:ext/json/json.c
PHP 7(电流):ext/json/json.c

没有内置的限制的JSON串行化数据的大小。无论如何不适用于字符串。因此,我会假设你已经遇到PHP内存限制或什么的。

json_encode一致的字符串只是增加了一些转义和外部双引号。在内部,这意味着内存翻倍(临时字符串连接和utf8_to_utf16转换/检查),以便我已经用8MB字符串运行我的32MB php内存限制。但除此之外,似乎没有任何限制json.c

+2

大小是方式小于8Mb。我'固定'它(这只是一个解决方法),不要将东西导入为JSON。这不是PHP的内存限制,否则我不能通过绕过JSON来修复问题 – patrick 2011-06-16 23:06:30

+0

@patrick值得一提的是你如何“修复”它和你的(解决方法)以帮助其他人在未来访问这里。 – fidev 2016-05-27 14:04:11

+0

就像我上面说的:我通过不编码来修复 – patrick 2016-05-28 20:45:33