gpt4 book ai didi

php - 无法输出没有断行的大字符串 block (nginx+php)

转载 作者:可可西里 更新时间:2023-11-01 12:38:35 24 4
gpt4 key购买 nike

我尝试向浏览器打印一个大的 JSON block (100k),但服务器失败且没有错误。

例如:

echo 'var config = ' 。 json_encode($配置)。 ';' . PHP_EOL;

我发现如果我寄一小件就可以了。我发现如果我在 JSON 字符串中放置换行符,即使字符串是 400k 也可以。

例如:

$config_json = json_encode( $config );
$config_json = str_replace( '},', '},' . PHP_EOL, $config_json );
echo 'var 配置 = '。 $config_json 。 ';' . PHP_EOL;

但是断线破坏了我的 JSON。

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

我也尝试过将 JSON 拆分成多个部分,如下所示:https://stackoverflow.com/a/19156563/1009525 , 但没有成功,只有断线对我有帮助。

最佳答案

写的时候

the server fails without an error

我猜你的意思是服务器向客户端发送了一个响应(状态码:200 - 没有错误),但是响应主体(内容)是空的(这是失败的)。

您应该检查这一点,因为如果服务器确实发送了一个包含内容的响应,那么问题不在于 php、nginx 或缓冲。

否则(如评论中所建议)可能是 JSON 而不是 <script> - </script> block 可以包裹在 <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、nginx 和 php-fpm 错误日志。

关于php - 无法输出没有断行的大字符串 block (nginx+php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43179357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com