downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ZipArchive::addEmptyDir> <Exemples
[edit] Last updated: Fri, 10 Feb 2012

view this page in

La classe ZipArchive

(No version information available, might only be in SVN)

Introduction

Un fichier d'archive, compressé Zip.

Synopsis de la classe

ZipArchive {
/* Propriétés */
/* Méthodes */
bool addEmptyDir ( string $dirname )
bool addFile ( string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0 ]]] )
bool addFromString ( string $localname , string $contents )
bool close ( void )
bool deleteIndex ( int $index )
bool deleteName ( string $name )
bool extractTo ( string $destination [, mixed $entries ] )
string getArchiveComment ([ int $flags ] )
string getCommentIndex ( int $index [, int $flags ] )
string getCommentName ( string $name [, int $flags ] )
mixed getFromIndex ( int $index [, int $length = 0 [, int $flags ]] )
mixed getFromName ( string $name [, int $length = 0 [, int $flags ]] )
string getNameIndex ( int $index [, int $flags ] )
string getStatusString ( void )
resource getStream ( string $name )
mixed locateName ( string $name [, int $flags ] )
mixed open ( string $filename [, int $flags ] )
bool renameIndex ( int $index , string $newname )
bool renameName ( string $name , string $newname )
mixed setArchiveComment ( string $comment )
mixed setCommentIndex ( int $index , string $comment )
mixed setCommentName ( string $name , string $comment )
mixed statIndex ( int $index [, int $flags ] )
mixed statName ( name $name [, int $flags ] )
mixed unchangeAll ( void )
mixed unchangeArchive ( void )
mixed unchangeIndex ( int $index )
mixed unchangeName ( string $name )
}

Propriétés

status

Le statut de l'archive Zip

statusSys

Le statut système de l'archive Zip

numFiles

Le nombre de fichiers dans l'archive

filename

Le nom du fichier dans le système de fichiers

comment

Commentaire pour l'archive

Sommaire



ZipArchive::addEmptyDir> <Exemples
[edit] Last updated: Fri, 10 Feb 2012
 
add a note add a note User Contributed Notes ZipArchive
webmaster at sebastiangrinke dot info 06-Oct-2011 03:30
Here is a simple function which zips folders with all sub folders or only a simple file... the $data var can be a string or an array...

<?php
public function un_zip($data,$arcpf,$mode='zip',$obj=''){
       
$absoluterpfad = 'YOUR_BASE_PATH';
       
$arcpf = $absoluterpfad.DS.$arcpf;
        if(
is_object($obj)==false){
            
$archiv = new ZipArchive();
            
$archiv->open($arcpf,ZipArchive::CREATE);
        }else{
$archiv =& $obj;}
        if(
$mode=='zip'){
           if(
is_array($data)==true){
                 foreach(
$data as $dtmp){
                    
$archiv =& un_zip($dtmp,$arcpf,'zip',&$archiv);
                 }
           }else{
            if(
is_dir($data)==true){
                   
$archiv->addEmptyDir(str_replace($absoluterpfad.DS,'',$data));
                 
$files = scandir($data);
              
$bad = array('.','..');
              
$files = array_diff($files,$bad);
               foreach(
$files as $ftmp){
                   if(
is_dir($data.DS.$ftmp)==true){
                       
$archiv->addEmptyDir(str_replace($absoluterpfad.DS,'',$data.'/'.$ftmp));
                       
$archiv =& un_zip($data.DS.$ftmp,$arcpf,'zip',&$archiv);
                   }elseif(
is_file($data.DS.$ftmp)==true){
                   
$archiv->addFile($data.DS.$ftmp,str_replace($absoluterpfad.DS,'',$data.'/'.$ftmp));
                   }
                 }
            }elseif(
is_file($data)==true){$archiv->addFile($data,str_replace($absoluterpfad.DS,'',$data));}
           }
        }
        if(
is_object($obj)==false){$archiv->close();}
        else{return
$archiv;}
        if(
$mode=='unzip'){$archiv->extractTo($data);}
    }
?>
Jerry dot Saravia at emc dot com 08-Aug-2011 03:57
The following code can be used to get a list of all the file names in a zip file.

<?php
$za
= new ZipArchive();

$za->open('theZip.zip');

for(
$i = 0; $i < $za->numFiles; $i++ ){
   
$stat = $za->statIndex( $i );
   
print_r( basename( $stat['name'] ) . PHP_EOL );
}
?>
anonymous at example dot net 29-Jul-2011 01:18
status - libzip error code (ER_*)
statusSys - copy of errno (E*) or zlib error code

ER_OK           N No error
ER_MULTIDISK    N Multi-disk zip archives not supported
ER_RENAME       S Renaming temporary file failed
ER_CLOSE        S Closing zip archive failed
ER_SEEK         S Seek error
ER_READ         S Read error
ER_WRITE        S Write error
ER_CRC          N CRC error
ER_ZIPCLOSED    N Containing zip archive was closed
ER_NOENT        N No such file
ER_EXISTS       N File already exists
ER_OPEN         S Can't open file
ER_TMPOPEN      S Failure to create temporary file
ER_ZLIB         Z Zlib error
ER_MEMORY       N Malloc failure
ER_CHANGED      N Entry has been changed
ER_COMPNOTSUPP  N Compression method not supported
ER_EOF          N Premature EOF
ER_INVAL        N Invalid argument
ER_NOZIP        N Not a zip archive
ER_INTERNAL     N Internal error
ER_INCONS       N Zip archive inconsistent
ER_REMOVE       S Can't remove file
ER_DELETED      N Entry has been deleted
h-fate at gmx dot net 05-Oct-2010 06:17
Be wary that there are several algorithms to generate a zip file. I found that Office OpenXML files created with ZipArchive are not recognized by Excel 2007, for example.

You have to use a different class to zip in this case, such as PclZip.
hardcorevenom at gmx dot com 15-Jun-2010 05:17
Read a file from an archive to a variable.
A warning is printed automatically in case of a CRC32 mismatch, which we capture, so we can print our own error message.

<?php
$zip
= new ZipArchive();
if (
$zip->open('archive.zip')) {
 
$fp = $zip->getStream('myfile.txt'); //file inside archive
 
if(!$fp)
    die(
"Error: can't get stream to zipped file");
 
$stat = $zip->statName('myfile.txt');

 
$buf = ""; //file buffer
 
ob_start(); //to capture CRC error message
   
while (!feof($fp)) {
     
$buf .= fread($fp, 2048); //reading more than 2156 bytes seems to disable internal CRC32 verification (bug?)
   
}
   
$s = ob_get_contents();
 
ob_end_clean();
  if(
stripos($s, "CRC error") != FALSE){
    echo
'CRC32 mismatch, current ';
   
printf("%08X", crc32($buf)); //current CRC
   
echo ', expected ';
   
printf("%08X", $stat['crc']); //expected CRC
 
}

 
fclose($fp);
 
$zip->close();
 
//Done, unpacked file is stored in $buf
}
?>

To create a corrupt file, change a byte in a zip file using a hex editor.

 
show source | credits | sitemap | contact | advertising | mirror sites