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> <
[edit] Last updated: Fri, 10 Feb 2012

view this page in

ZipArchive クラス

(バージョン情報なし。おそらく SVN 版にしか存在しないでしょう)

導入

Zip で圧縮されたファイルアーカイブです。

クラス概要

ZipArchive {
/* プロパティ */
/* メソッド */
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 )
}

プロパティ

status

Zip アーカイブの状態

statusSys

Zip アーカイブのシステム状態

numFiles

アーカイブ内のファイル数

filename

ファイルシステム上のファイル名

comment

アーカイブのコメント

目次



ZipArchive::addEmptyDir> <
[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 10: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 10: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 08: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 01: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 16-Jun-2010 12: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 | stats | sitemap | contact | advertising | mirror sites