2014-10-20 73 views
1

我最近選擇了一本使用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緩衝我的輸出?謝謝!

+0

包括字符集:'print'Content-type:text/plain; charset = utf-8 \ n \ n「;' – kums 2014-10-20 03:24:10

+0

@kums:剛試過,沒有運氣。它在顯示任何內容之前還需要整整30秒。 – tjwrona1992 2014-10-20 03:26:55

+0

你有沒有嘗試過與其他瀏覽器?他們顯示相同的行爲? – kums 2014-10-20 03:29:25

回答

0

嘗試禁用'mod_deflate'。

只需從啓用了mods的目錄中移動/刪除它即可。 不要忘記在這樣做後重新啓動Apache。

+0

我可以嘗試移動它,但在配置文件中包含mod_deflate的行已被註釋掉,所以我懷疑移動它會改變任何內容。 – tjwrona1992 2014-10-20 12:48:35

+0

我搬了mod_deflate模塊沒有運氣,輸出仍然緩衝,有任何其他的想法? – tjwrona1992 2014-10-21 01:06:52