2010-08-30 10 views

Antwort

5

Verwenden Sie zip_open und zip_read Funktionen, um es zu tun. Dokumentation kann man bei http://pl2.php.net/manual/en/function.zip-read.php

<?php 
/** 
* This method unzips a directory within a zip-archive 
* 
* @author Florian 'x!sign.dll' Wolf 
* @license LGPL v2 or later 
* @link http://www.xsigndll.de 
* @link http://www.clansuite.com 
*/ 

function extractZip($zipFile = '', $dirFromZip = '') 
{ 
    define(DIRECTORY_SEPARATOR, '/'); 

    $zipDir = getcwd() . DIRECTORY_SEPARATOR; 
    $zip = zip_open($zipDir.$zipFile); 

    if ($zip) 
    { 
     while ($zip_entry = zip_read($zip)) 
     { 
      $completePath = $zipDir . dirname(zip_entry_name($zip_entry)); 
      $completeName = $zipDir . zip_entry_name($zip_entry); 

      // Walk through path to create non existing directories 
      // This won't apply to empty directories ! They are created further below 
      if(!file_exists($completePath) && preg_match('#^' . $dirFromZip .'.*#', dirname(zip_entry_name($zip_entry)))) 
      { 
       $tmp = ''; 
       foreach(explode('/',$completePath) AS $k) 
       { 
        $tmp .= $k.'/'; 
        if(!file_exists($tmp)) 
        { 
         @mkdir($tmp, 0777); 
        } 
       } 
      } 

      if (zip_entry_open($zip, $zip_entry, "r")) 
      { 
       if(preg_match('#^' . $dirFromZip .'.*#', dirname(zip_entry_name($zip_entry)))) 
       { 
        if ($fd = @fopen($completeName, 'w+')) 
        { 
         fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry))); 
         fclose($fd); 
        } 
        else 
        { 
         // We think this was an empty directory 
         mkdir($completeName, 0777); 
        } 
        zip_entry_close($zip_entry); 
       } 
      } 
     } 
     zip_close($zip); 
    } 
    return true; 
} 

// The call to exctract a path within the zip file 
extractZip('clansuite.zip', 'core/filters'); 
?> 
+0

'if ($ zip)' nicht funktioniert, sollten Sie '' verwenden if (is_resource ($ zip)). Siehe ['zip_open'] (http://php.net/manual/fr/function.zip-open.php). Außerdem ist der in der Antwort angegebene Link nicht mehr verfügbar. – kjaquier

0

Das zip:// Protokoll, das von der ZIP extension von PHP zur Verfügung gestellt wird. Überprüfen Sie in Ihrer phpinfo() Ausgabe, ob die Erweiterung installiert wurde oder nicht.

+0

von phpinfo(): Zip => aktiviert Erweiterung Version => $ Id: php_zip.c, v 1.1.2.38 2007.08.06 22.02.32 bjori Exp $ Zip version => 2.0. 0 Libzip version => 0.7.1 Registrierte PHP Streams => zip, php, Datei, Daten, http, ftp, compress.bzip2, compress.zlib, https, ftps – Sam

+0

Haben Sie überprüft, ob die Datei versuchen Sie es open ist eigentlich eine gültige '.zip' Datei? – joschi

+0

%> Datei test.zip test.zip: Zip Archiv Daten, mindestens v2.0 um zu extrahieren – Sam

0

Verwendung ZipArchive Klasse

$zip = new ZipArchive; 
$zip->open('test.zip'); 
echo $zip->getFromName('filename.txt'); 
$zip->close(); 
Verwandte Themen