Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ob_flush加载消息的PHP延时_Php_Buffer_Sleep - Fatal编程技术网

使用ob_flush加载消息的PHP延时

使用ob_flush加载消息的PHP延时,php,buffer,sleep,Php,Buffer,Sleep,我正在运行一个访问一些MySQL数据库的PHP脚本,我需要等待几秒钟,直到上一个脚本将所有信息输入数据库。等待时间应该不会太长,但为了防止服务器在非工作日运行缓慢,我使用sleep(10)在执行脚本之前等待10秒。我想显示一条“请等待”消息,而它正在等待10秒,但不幸的是,该消息只有在10秒已经完成后才会显示。我就是这么做的: ob_start(); echo "Please wait while your invoice is being created... </br>"; ob

我正在运行一个访问一些MySQL数据库的PHP脚本,我需要等待几秒钟,直到上一个脚本将所有信息输入数据库。等待时间应该不会太长,但为了防止服务器在非工作日运行缓慢,我使用sleep(10)在执行脚本之前等待10秒。我想显示一条“请等待”消息,而它正在等待10秒,但不幸的是,该消息只有在10秒已经完成后才会显示。我就是这么做的:

ob_start();
echo "Please wait while your invoice is being created... </br>";
ob_flush();
sleep(10);
ob_end_clean();
echo "Success...";
ob_start();
echo“正在创建发票,请稍候…
”; ob_flush(); 睡眠(10); ob_end_clean(); 呼应“成功……”;

根据一些在线研究,我的印象是ob_flush()会在10秒之前输出文本,然后ob_end_clean()会擦除之前打印的文本,但我得到的是,两个文本都会在10秒之后显示,并且第一个文本不会被擦除。你们知道我做错了什么吗?

你们不能编辑已经用PHP输出的任何内容,这需要重新加载页面。ob_flush只输出缓冲区并清空它。ob_end_clean()停止输出缓冲,允许您再次正常输出


要隐藏显示的文本,您需要输出一个javascript来隐藏以前呈现的文本(最好用div或其他格式包装,以便于选择)。

如果您想在html发送到浏览器后修改html,您需要使用javascript,但不能使用php。您在Web服务器上有输出缓冲吗?没有,我没有修改任何html。这个PHP脚本要做的就是回显来自几个不同MySQL数据库的信息。请注意,输出缓冲区不是您在控制台/浏览器中看到的,它只是PHP使用的一些内存。我正在阅读关于ob_flush()的PHP手册,它说浏览器将输出缓冲区视为一个全有或全无对象,所以ob_flush()是无法用于在睡眠()之前显示文本。没有解决办法吗?有没有办法在10秒结束前至少输出文本?我不知道这还没起作用。调用ob_flush();冲洗();而是为了增加这种可能性。这方面有一些问题。GZIP压缩的改变使web服务器更有可能不缓冲它,并且输出超过255个字符使它在IE中更可靠(至少在那个时候用来清空缓冲区)。