微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有断行不能输出大的字符串块(nginx php)

我尝试将一个大的JSON块(100k)打印到浏览器,但服务器在没有错误的情况下失败.

例如:

echo’var config =’. json_encode($config). ‘;’ . PHP_EOL;

我发现如果我送一小块,那就没事了.
我发现如果我在JSON字符串中放置换行符,即使字符串是400k也没关系.

例如:

$config_json = json_encode($config);
$config_json = str_replace(‘},’,’},’.PHP_EOL,$config_json);
echo’var config =’. $config_json. ‘;’ . PHP_EOL;

但是破坏线打破了我的JSON.

那么,如果它是缓冲区设置,为什么PHP_EOL有帮助?

我也尝试将JSON分成像这样的部分:https://stackoverflow.com/a/19156563/1009525,但没有成功,只有breaklines帮助我.

最佳答案
在你写的时候

the server fails without an error

我认为你的意思是服务器向客户端发送响应(状态代码:200 – 没有错误),但响应主体(内容)是空的(这是失败).

您应该检查这一点,因为如果实际上服务器发送带有内容的响应,则问题不在于PHP,Nginx或缓冲.

否则(如评论中所建议的)可能是JSON而不是< script> – < / script>块可以包裹在< pre>之间.标签,这可能是问题(但除非你发布更多的代码,否则我无法帮助).

从现在开始,我假设从服务器发送的响应为空

您发布的代码是有效的,并且应该正确处理您正在构建的输出字符串(远远低于PHP限制).

说这似乎是一个奇怪的缓冲问题.我写“怪异”,因为据我所知(我也花时间做一些研究)缓冲不应该受到换行的影响.

I have found that if I put line breaks in the JSON string,it’s OK even if the string is 400k.

解决问题的快速解决方法输出带有换行符的有效JSON.您只需要为json_encode指定一个选项:

echo 'var config = ' . json_encode( $config,JSON_PRETTY_PRINT ) . ';' . PHP_EOL;

JSON_PRETTY_PRINT告诉json_encode将json格式化为更易读,这样做会添加换行符.

(请注意,此选项适用于PHP 5.4.0及更高版本)

我希望上述解决方案适合您.

无论如何,我强烈建议您进一步调查此问题,以便让原始代码也能正常工作.

首先,你应该确保你运行NginxPHP的最新稳定版本.

然后我会检查Nginx配置文件,PHP-fpm配置(如果你使用的是PHP-fpm),最后是PHP配置.

还要检查PHP,NginxPHP-fpm错误日志.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐