2011-08-09 1 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

지오메트리가 지정되면 tar이 완료 될 때까지 기다리는 중입니다. 파이프로부터 읽는 것은 데이터 생성과 동시에 데이터를 출력해야합니다 :

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

글쎄, 백틱의 경우 실제로 프로세스가 완료 될 때까지 기다리고 나서 출력을 보내고 있습니다. 나는 IPC::Open 가족에게서 뭔가를 제안 할 것이다. IPC::Open3 트릭을 할 수 있습니다.

+0

또한 open2! 나를 올바른 방향으로 가리켜 주셔서 감사합니다. – Falcata

관련 문제