我最近選擇了一本使用Perl書籍的CGI編程,並嘗試測試遇到問題時的一個示例問題。根據本書較新版本的Apache(自v1.3以來),默認情況下不緩存CGI腳本的輸出,但是當我運行下面的腳本時,它會等到整個循環完成後纔打印任何內容:使用XAMPP Apache服務器執行Perl CGI輸出緩衝
# count.cgi
#!"C:\xampp\perl\bin\perl.exe" -wT
use strict;
#print "$ENV{SERVER_PROTOCOL} 200 OK\n";
#print "Server: $ENV{SERVER_SOFTWARE}\n";
print "Content-type: text/plain\n\n";
print "OK, starting time consuming process ... \n";
# Tell Perl not to buffer our output
$| = 1;
for (my $loop = 1; $loop <= 30; $loop++) {
print "Iteration: $loop\n";
## Perform some time consuming task here ##
sleep 1;
}
print "All Done!\n";
這本書說使用舊版本的Apache,你可能需要將腳本作爲「nph」腳本來運行,這樣輸出將不會被緩衝,但我甚至在沒有運氣的情況下嘗試過。
# nph-count.cgi
#!"C:\xampp\perl\bin\perl.exe" -wT
use strict;
print "$ENV{SERVER_PROTOCOL} 200 OK\n";
print "Server: $ENV{SERVER_SOFTWARE}\n";
print "Content-type: text/plain\n\n";
print "OK, starting time consuming process ... \n";
# Tell Perl not to buffer our output
$| = 1;
for (my $loop = 1; $loop <= 30; $loop++) {
print "Iteration: $loop\n";
## Perform some time consuming task here ##
sleep 1;
}
print "All Done!\n";
我運行:阿帕奇/ 2.4.10(Win32的)的OpenSSL/1.0.1i PHP/5.5.15
顯然,這種版本的Apache超出V1.3那麼這到底是怎麼回事呢?我做了一些研究,發現如果啓用了「mod_deflate」或「mod_gzip」,它可能會導致輸出緩衝,但我檢查了我的配置文件,並且「mod_deflate」和「mod_gzip」都已禁用。我所見過的關於緩衝的所有其他帖子都提到了PHP,並說要修改「php.ini」,但我使用的是Perl,而不是PHP,所以似乎並不是解決方案。
此外,我不知道這是否有幫助,但我使用Chrome作爲我的網絡瀏覽器。
如何阻止Apache緩衝我的輸出?謝謝!
包括字符集:'print'Content-type:text/plain; charset = utf-8 \ n \ n「;' – kums 2014-10-20 03:24:10
@kums:剛試過,沒有運氣。它在顯示任何內容之前還需要整整30秒。 – tjwrona1992 2014-10-20 03:26:55
你有沒有嘗試過與其他瀏覽器?他們顯示相同的行爲? – kums 2014-10-20 03:29:25