我有这个Perl脚本位于我的Apache服务器的cgi-bin文件夹中:
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
print "Content-type: text/html\r\n\r\n";
print "Hello there!<br />\nJust testing .<br />\n";
my $top = 5;
foreach (1..$top) {
print "i = $_<br />\n";
sleep 1;
}
Run Code Online (Sandbox Code Playgroud)
我想在这里实现的是逐步更新网页以向用户显示更新状态.然而,我实际上得到的是在延迟5秒之后的整个输出.
有什么办法可以编写一个能够不断告知用户进度的脚本吗?我有一个脚本需要很长时间才能完成,我希望能够实时看到它的进度而不是完整的脚本.
我也尝试将autoflush模式设置为off($ | = 0),但即便如此也没有做任何事情.
Randal Schwartz 通过CGI展示了观察长流程的更好方法.
也就是说,说谎内容类型无济于事.以下脚本完全按照您希望它在使用Apache 2.2的Windows XP上执行的操作(因为最后一行输出需要十秒钟):
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(:cgi);
print header('text/plain');
$| = 1;
print "Job started\n";
for ( 1 .. 10 ) {
print "$_\n";
sleep 1;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您要发送HTML,您无法避免这样的事实,即大多数浏览器会等到他们认为足够的页面才能开始呈现.