perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Torsten Förtsch <torsten.foert...@gmx.net>
Subject Re: Zip on the fly problem
Date Tue, 12 Jan 2010 13:09:36 GMT
On Tuesday 12 January 2010 13:49:34 Thomas den Braber wrote:
> I use Archive::Zip to generate zip files on the fly in Modperl 2.04 with
> code similar like this:
> 
> my $zip = Archive::Zip->new();  
> my $member = $zip->addFile( '/home/testimg/test1.jpg', 'testfile1.jpg' );
> if ($member){
>   $member->desiredCompressionLevel( 1 );
> }
> $member = $zip->addFile( '/home/testimg/test2.ppt', 'testfile2.ppt' );
> if ($member){
>   $member->desiredCompressionLevel( 1 );
> }
>         
> if ( $zip->numberOfMembers() ){
>   unless ( $zip->writeToFileHandle( \*STDOUT, 0) == Archive::Zip::AZ_OK) {
>     print STDERR "Zip error: $!";
>   }
> }
> 
> This works fine with Archive::Zip version 1.26 but fails with version 1.30
> I checked the ARchibe::Zip code and could not find anything that can cause
> the problem accept for the change from using Compress::Zlib to
> Compress::Raw::Zlib.
> 
> The error is: 'IO error: seeking to rewrite local header : Invalid
>  argument'
> 
> If I use desiredCompressionLevel(0) then there is no problem but no
> compression is done.
> 
> The error is only related to Mod_perl.  As a console script it runs fine.
> Problem is on both Windows and Linux (perl 5.10).

I can only guess here but does your console script write to a pipe or to a 
file?

Could you try:

  script | cat >output.zip

> Has anyone any idea what might be the problem? or have an alternative
> solution?
> 
Move the ZIP file generation to a PerlFixupHandler and have it write a 
temporary file. Then have the default handler ship the file and remove it in a 
request pool cleanup or so.

This has the additional benefit of sending a Content-Length header (don't 
forget to update $r->finfo) which often leads to faster delivery.

Torsten

Mime
View raw message