PHP 文字挨个输出设置

首页 / php / 正文

获取中...

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

保存完成后,记得重启网站

lj5fwcrl.png

lj5fwh5t.png

测试代码

<?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
打赏
评论区
头像
    头像
    anni
    2023年12月09日 12:35
    回复

    经实践,发现其实PHP配置无需任何修改亦可,只要nginx增加那行配置就行的。既然都回复了,就顺便请教博主一个问题:
    我在PHP中输出的换行(\n),经过event-stream输出后,在js中想将\n换成
    ,但使用replace(/\s|\r|\n/g,'
    ')都是无效的,经验证用replace(/^$/g,'
    ')是有效的。这是怎么回事。

      头像
      夏小沫
      2023年12月11日 10:39
      回复

      你在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, ' '); // 替换所有可能的换行符