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

前端之家收集整理的这篇文章主要介绍了没有断行不能输出大的字符串块(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错误日志.

原文链接:https://www.f2er.com/nginx/434947.html

猜你在找的Nginx相关文章