PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : File oder dir vor dem Download zippen


Socrates
27.10.2007, 22:09:08
Abend!
Ich möchte eine Datei oder ein Verzeichnis vor dem Download zippen, ohne dass die zip-Datei gespeichert wird. Das habe ich so gemacht:
<?php
error_reporting(E_ALL);

function zip_file($path)
{
$path_info = pathinfo($path);
$file = $path_info['basename'];
$file = current(explode(".",$file));
echo $file.'<br />';

if (file_exists($path))
{
if (@system('zip '.$file.$path))
{
return true;
}

else if (@exec('zip '.$file.'.zip '.$path))
{
return true;
}

else
{
// Could not zip entry
return false;
}

}

else
{
// Entry does not exist
return false;
}
}

$path = 'files/pix/Thumbs.db';
zip_file($path);
?>
Leider funktioniert das ganze nicht und ich erhalte keine Fehlermeldungen. Kann mir jemand sagen, wo mein fehler liegt?
MfG, Andy

feuervogel
28.10.2007, 09:31:28
du willst fehlermeldungen sehen? warum unterdrückst du sie dann?

sysop
28.10.2007, 10:16:16
ich würde mir eine zip classe laden und es damit machen. exec kann/muss aber nicht unterstützt werden.

feuervogel
28.10.2007, 11:53:18
ich würde mir eine zip classe laden und es damit machen. exec kann/muss aber nicht unterstützt werden.

zudem muss zip nicht zwingend installiert sein...

Socrates
28.10.2007, 14:18:36
Ich habe eine Lösung. So gehts:
<?php
function zip_file($path)
{
$path_to = dirname($path);
$file = basename($path);
$file = current(explode(".",$file));
echo $file.'<br />';

if (file_exists($path))
{
if (@system('zip '.$path_to.'/'.$file.$path))
{
return true;
}

else if (@exec('zip '.$path_to.'/'.$file.'.zip '.$path))
{
return true;
}

else if (@file_put_contents($path_to.'/'.$file.'.gz', @gzencode(@file_get_contents($path),9)))
{
return true;
}

else
{
echo 'Could not zip entry.';
return false;
}

}

else
{
echo 'Entry does not exist.';
return false;
}
}

$path = 'files/pix/cursor.gif';
zip_file($path);
?>
du willst fehlermeldungen sehen? warum unterdrückst du sie dann?Tu ich nicht ich poste es zwar mit @ aber teste es ohne. :)
MfG, Andy