加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

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

发布时间:2020-12-13 21:04:59 所属栏目:Nginx 来源:网络整理
导读:我尝试将一个大的JSON块(100k)打印到浏览器,但服务器在没有错误的情况下失败. 例如: echovar config =. json_encode($config). ; . PHP_EOL; 我发现如果我送一小块,那就没事了. 我发现如果我在JSON字符串中放置换行符,即使字符串是400k也没关系. 例如: $co

我尝试将一个大的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及更高版本)

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

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

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

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

还要检查php,nginx和php-fpm错误日志.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读