Wer kennt das nicht, haufenweise verschiedene Archivformate zip, gz, bz, lzma, etc. sind auf dem Desktop kein Problem. Beim Erstellen einer Webanwendung wurde das in PHP schon komplizierter, also hab ich es exec() und 7-zip gelöst.
Im Anhang also ein Packet mit PHP – Funktion zum Entpacken und 7zip – Binary’s für 32 / 64 – Bit Linux und Windowssysteme.
Zum Verwenden auf Linuxsystemen die 32/7z und 64/7z ausführbar machen und functions.php ins Script einbinden. Die extractAll-Funktion wird mit dem Archiv und möglicherweise 7zip-Parametern aufgerufen. rmdirr() löscht ein Verzeichnis rekursiv (auch wenn noch Dateien in Unterverzeichnissen liegen), sehr praktisch bei gerade entpackten Archiven.
Herunterladen: php-7z
/* Nerd 2.0
* March 2010
* www.nerd20.de
*/
function extractAll($file, $cmd = '') {
// 64 / 32 Bit - Unix, Windows
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$cmd = '32\7z x '.$file.' -y '.$cmd;
}
else {
if(intval(-6981276091) == -6981276091) {
$cmd = '64/7z x '.$file.' -y '.$cmd;
}
else {
$cmd = '32/7z x '.$file.' -y '.$cmd;
}
}
// Ausführen
exec($cmd, $output);
return $output;
}
/**
* Delete a file, or a folder and its contents (recursive algorithm)
*
* @author Aidan Lister <aidan@php.net>
* @version 1.0.3
* @link http://aidanlister.com/repos/v/function.rmdirr.php
* @param string $dirname Directory to delete
* @return bool Returns TRUE on success, FALSE on failure
*/
function rmdirr($dirname)
{
// Sanity check
if (!file_exists($dirname)) {
return false;
}
// Simple delete for a file
if (is_file($dirname) || is_link($dirname)) {
return unlink($dirname);
}
// Loop through the folder
$dir = dir($dirname);
while (false !== $entry = $dir->read()) {
// Skip pointers
if ($entry == '.' || $entry == '..') {
continue;
}
// Recurse
rmdirr($dirname . DIRECTORY_SEPARATOR . $entry);
}
// Clean up
$dir->close();
return rmdir($dirname);
}
Vielen Dank an aidanlister.com für das Löschen von Verzeichnissen und dem smarty Blog für 32- / 64-Bit Abfrage.

