2011-08-09 27 views
2

我想從perl cgi腳本發送壓縮tarball。一切工作正常,除了tarball只在被壓縮和創建之後才被髮送。換句話說,它不是'流'數據的生活,這是相當成問題的,因爲數據非常大。可能使用Perl流式壓縮數據流

print "Content-Type:application/x-download\n"; 
print "Content-Disposition:attachment;filename=download.tar.\n\n"; 
print `tar zc $path/$file` 

我也嘗試過做tar zcf - $path/$file其中寫到標準輸出和它做同樣的事情。

回答

2

正如Geo指出的,您正在等待tar完成。從管道讀取也應該與其創建並行輸出數據:

open my $pipe_fh, '-|', "tar zc $path/$file" or die; 
while(<$pipe_fh>) { 
    print; 
} 
1

那麼,在反引號的情況下,你實際上正在等待該過程完成,然後你發送它的輸出。我會建議從IPC::Open家庭的東西。 IPC::Open3可以做到這一點。

+0

它也與open2!感謝您指點我正確的方向。 – Falcata