Tijnema wrote:
> On 6/1/07, Jim Lucas <lists@xxxxxxxxx> wrote:
>> Auto-Deppe, C. Haensel wrote:
>> > Hi guys,
>> >
>> > thanks to Jim, I made it :o) Here's the source I'm using for testing
>> > now... it works. I just need to make it less vulnerable ;o)
>> >
>> > ----- SNIP -----
>> > <?
>> > $nr = $_GET['nr'];
>> > if(eregi("../", $nr)) {
>> > die("Hier wird nicht rumgehackt");
>> > }
>> > $directory = '_kfz_images/'.$nr.'/full/';
>> > $dir = opendir($directory);
>> > $i = 1;
>> > while($file = readdir($dir)) {
>> > $dest = "temp/Auto-Deppe-".$nr."_".$i.".jpg";
>> > if(eregi("jpg", $file)) {
>> > copy($directory.$file, $dest);
>> > $i++;
>> > }
>> > }
>> > $now = time();
>> > header("Content-Type: application/force-download");
>> > header('Content-Disposition: attachment;
>> > filename="Auto-Deppe-'.$now.'_Download.zip"');
>> > exec("zip ".$now."_archive.zip temp/* 2>&1", $output);
>> > readfile($now."_archive.zip");
>> > $tempdir = opendir("temp");
>> > while($tempfile = readdir($tempdir)) {
>> > if(eregi("jpg", $tempfile)) {
>> > unlink("temp/".$tempfile);
>> > }
>> > }
>> > ?>
>> > ----- SNAP -----
>> > So I am copying the files to a temp dir, and then zip em up, delete
>> them
>> > afterwards. I copy them to the dir so I wouldn't have the whole
>> > /kfz_images/number/full/ structure in the zip).
>> >
>> > Aaaanyhow, it works, it does work fast enough, and I am happy :o)
>> >
>> > Thanks a bunch, guys, and have a great day!
>> >
>> > This is Christian Haensel live from Extertal, Germany. Back to you.
>> >
>> > -:oD)=
>> >
>> >
>> > ----- Original Message ----- From: "Tijnema" <tijnema@xxxxxxxxx>
>> > To: "Chris" <dmagick@xxxxxxxxx>
>> > Cc: "Auto-Deppe, C. Haensel" <c.haensel@xxxxxxxxxxxxx>;
>> > <php-general@xxxxxxxxxxxxx>
>> > Sent: Friday, June 01, 2007 9:27 AM
>> > Subject: Re: ZIP it :o)
>> >
>> >
>> >> On 6/1/07, Chris <dmagick@xxxxxxxxx> wrote:
>> >>> Auto-Deppe, C. Haensel wrote:
>> >>> > Morning guys,
>> >>> >
>> >>> > I have been trying to find an easy to use way to zip an
archive on
>> >>> a > linux
>> >>> > box running PHP5. Now I've tried the zip-lib.php and others, but
>> they
>> >>> > always
>> >>> > throw an error msg.... But that is not the question.
>> >>> >
>> >>> > I am looking to use exec("zip archive.zip $directory");
$directory
>> >>> has
>> >>> > been
>> >>> > tried with both full path and relative path ... but that doesn't
>> >>> work. > I
>> >>> > don't get an error, it just doesn't create the zip-file...
>> >>> >
>> >>> > So, after a day of Google-ing and trying, I thought I might
ask you
>> >>> for
>> >>> > help.
>> >>> >
>> >>> > Cheers for any answers and hints.
>> >>>
>> >>> http://pear.php.net/package/Archive_Zip and/or
>> >>> http://pear.php.net/package/File_Archive
>> >>>
>> >>> and please create a *new* message instead of replying to an
>> existing one
>> >>> and changing the topic. It screws up message threading (in email
>> clients
>> >>> and in the archives).
>> >>
>> >> Not in gmail :)
>> >>
>> >> I had same problem lately, wanted also to create zip files from
PHP, i
>> >> tried various build in functions, but i ended up with the exec way.
>> >> It has been said before, but PHP probably doesn't have the right
>> >> permissions to write the .zip file, so i would recommend you to
write
>> >> to /tmp first.
>> >>
>> >> Tijnema
>> >>
>> >>>
>> >>
>> >
>> Here's a link to the zip class that I use
>>
>> http://www.phpclasses.org/browse/package/945.html
>>
>> One thing though, your PHP install has to be compiled with
"--with-zlib"
>>
>> That was the only thing that I ran into with this.
>>
>> Since you are creating files to download, with this class, you don't
>> even need to write them to the
>> filesystem. You just create the archive in memory (given that you
>> have enough RAM && php is allowed
>> to consume as much memory as it would take the create the archive) and
>> then dump it to the browser
> Yes, but what happens when you try to create a 1GB archive with 512MB
> RAM? (and no swap space too)
> or if 100s of people call the same script that creates a 10-20MB file?
> If you use the exec way, this will go fine :)