Archiv | Impressum | Datenschutz
19. März 2010
Nerd 2.0

Entpacken mit PHP

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.

Ähnliche Beiträge:
Text gekürzt, aber HTML offen?
Lesezeichensidebar mit Icons
META-Tags, dynamisch mit Ultimate Tag Warrior!
Archiv für WordPress! Ohne Links?
Umstellung von Fun-Synchro.de

Kommentieren