PHP 文字挨个输出设置
用于chatgpt中打字效果 (即秒回信息)
以下是以宝塔面板 设置,环境为 Nginx + PHP 7.2
对于nginx环境,需要在配置文件中增加以下配置:
fastcgi_buffering off;
可能还要删掉以下几行配置(如果有的话):
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
PHP.INI
搜索
output_buffering = 4096
修改成
output buffering = off
;output_buffering = 4096
保存完成后,记得重启网站
测试代码
<?php
header('Content-type: text/html; charset=utf-8');
echo 'Begin ...<br />';
for ($i = 0; $i < 10; $i++) {
ob_flush();
flush();
echo $i . '<br />';
sleep(1);
}
echo 'End ...<br />';
能跑出0123456 挨个输出的效果就对了
改完php的ini 可能会有一些警告报警,关闭php里的警告设置就可以了
经实践,发现其实PHP配置无需任何修改亦可,只要nginx增加那行配置就行的。既然都回复了,就顺便请教博主一个问题:
我在PHP中输出的换行(\n),经过event-stream输出后,在js中想将\n换成
,但使用replace(/\s|\r|\n/g,'
')都是无效的,经验证用replace(/^$/g,'
')是有效的。这是怎么回事。
你在PHP中输出的换行符(\n)在传递到JavaScript后可能已经被处理或转义,因此在JavaScript中你可能无法直接使用replace(/\s|\r|\n/g,' ')来替换换行符。这可能是你在尝试替换时遇到问题的原因。
另外,你说replace(/^$/g,' ')是有效的,这个正则表达式的含义是匹配空行,如果它有效,那可能意味着你的字符串中有空行。
如果你想在JavaScript中替换字符串中的换行符,你可以尝试以下方法:
1. 如果字符串中的换行符已经被转义(例如,你的字符串实际上包含的是"\\n"而不是"\n"),那么你需要先将转义的换行符转换为实际的换行符,然后再进行替换。例如:
str = str.replace(/\\n/g, '\n'); // 将转义的换行符转换为实际的换行符
str = str.replace(/\n/g, ' '); // 替换换行符
2. 如果你不确定字符串中的换行符是什么样的(例如,可能是"\n",也可能是"\r\n"或"\r"),那么你可以使用一个正则表达式来匹配所有可能的换行符。例如:
str = str.replace(/(\r\n|\n|\r)/g, ' '); // 替换所有可能的换行符