Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
用PHP逐行输出_Php_Line - Fatal编程技术网

用PHP逐行输出

用PHP逐行输出,php,line,Php,Line,在一个小应用程序中,我正在编写,在安装阶段,用户必须在表单中输入有关MySQL连接的详细信息(服务器名称、数据库名称、用户名…) 我想在一个窗口中逐行显示测试和操作的结果,最终在每个测试之间有一个小的停顿,如: “连接到服务器…”(2s)“正常”(2s) “连接到数据库…”(2s)“正常”(2s) “创建表…”(2s)“确定” ……等等 我尝试过ob_start()、flush()、ob_flush(),但它不起作用,因为我的Web服务器似乎在缓冲php输出,所以脚本运行需要很长时间,但所有内容

在一个小应用程序中,我正在编写,在安装阶段,用户必须在表单中输入有关MySQL连接的详细信息(服务器名称、数据库名称、用户名…)

我想在一个窗口中逐行显示测试和操作的结果,最终在每个测试之间有一个小的停顿,如:

“连接到服务器…”(2s)“正常”(2s)
“连接到数据库…”(2s)“正常”(2s)
“创建表…”(2s)“确定”
……等等

我尝试过ob_start()、flush()、ob_flush(),但它不起作用,因为我的Web服务器似乎在缓冲php输出,所以脚本运行需要很长时间,但所有内容都是同时打印的

我在这里和谷歌搜索过,没有任何结果(可能没有正确的关键字)

你能给我指出解决办法吗?
用Ajax可以吗

ericc

每次打印之前您都试过吗

编辑

您可以使用usleep()使php脚本延迟执行,以便可以逐个查看文本,它可以替代在您的情况下使用缓冲

mysql_connect() successfully -> print something -> usleep(300)
mysql_select_db() successfully -> print something -> usleep(300)

有多种解决方案,但完全禁用缓存并不容易。
因为在服务器端有一些可以禁用的缓存,但是浏览器也有很大的可能正在缓存

要解决此问题,您有几个选项:

  • 假装它,显示基于javascript的静态“动画”,并在完成时重定向

  • 使用ajax,让安装脚本将结果回送到文本文件/mysql数据库,并使用不同的php脚本以设定的间隔加载文本文件/数据库并显示新结果

  • 使用最新的HTML5/javascript流式API,它正是为这样的东西而设计的,然而,很难找到任何关于这方面的好文档

要禁用服务器端缓存,我使用以下代码:

@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);
header('Expires: Fri, 01 Jan 1990 00:00:00 GMT');
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Pragma: no-cache');
header('Connection: close');
@ini\u集('zlib.output\u compression',0);
@ini_集(“隐式_刷新”,1);
对于($i=0;$i
Ajax将不是一个解决方案,您是否尝试在php.ini中关闭输出缓冲?与sleep()相比,它有什么优势?它将如何解决我的缓冲问题?有什么好处?你在php.net上看过了吗?sleep()和usleep()的区别是秒和毫秒。当然,在上面的例子中,可以看到我对如何替换缓冲的编辑。但是我看不到使用sleep()或usleep()之间的区别或优势,只是我能够以毫秒为单位指定时间。问题实际上是在服务器级别,它缓冲php脚本的输出,并且只在脚本结束时发送内容。这不是什么优势:)sleep()和usleep()的使用取决于何时使用它。回到您的问题,使用缓冲比延迟代码是一种好的做法,我的解决方案很简单,基于情况:)“header('content-type:text/event-stream');”让页面下载:-o。剩下的代码可以在Firefox 3.16/Linux上使用,但不能在Chrome/Linux上使用,也不能在WindowsXP下使用其他组合:-(在WindowsXP下,这似乎是因为我使用了代理。我会用JQuery(.fadeIn)来伪装它,这样会更简单、更好