ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Zip-Π°Ρ€Ρ…ΠΈΠ²Π°

<?php

$zip
= new ZipArchive();
$filename = "./test112.zip";

if (
$zip->open($filename, ZipArchive::CREATE)!==TRUE) {
exit(
"НСвозмоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ <$filename>\n");
}

$zip->addFromString("testfilephp.txt" . time(), "#1 Π­Ρ‚ΠΎ тСстовая строка добавляСтся Π² качСствС testfilephp.txt.\n");
$zip->addFromString("testfilephp2.txt" . time(), "#2 Π­Ρ‚ΠΎ тСстовая строка добавляСтся Π² качСствС testfilephp2.txt.\n");
$zip->addFile($thisdir . "/too.php","/testfromfile.php");
echo
"numfiles: " . $zip->numFiles . "\n";
echo
"status:" . $zip->status . "\n";
$zip->close();
?>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± Π°Ρ€Ρ…ΠΈΠ²Π΅

<?php
$za
= new ZipArchive();

$za->open('test_with_comment.zip');
print_r($za);
var_dump($za);
echo
"numFiles: " . $za->numFiles . "\n";
echo
"status: " . $za->status . "\n";
echo
"statusSys: " . $za->statusSys . "\n";
echo
"filename: " . $za->filename . "\n";
echo
"comment: " . $za->comment . "\n";

for (
$i=0; $i<$za->numFiles;$i++) {
echo
"index: $i\n";
print_r($za->statIndex($i));
}
echo
"numFile:" . $za->numFiles . "\n";
?>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #3 ИспользованиС ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° Zip, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ OpenOffice

<?php
$reader
= new XMLReader();

$reader->open('zip://' . dirname(__FILE__) . '/test.odt#meta.xml');
$odt_meta = array();
while (
$reader->read()) {
if (
$reader->nodeType == XMLREADER::ELEMENT) {
$elm = $reader->name;
} else {
if (
$reader->nodeType == XMLREADER::END_ELEMENT && $reader->name == 'office:meta') {
break;
}
if (!
trim($reader->value)) {
continue;
}
$odt_meta[$elm] = $reader->value;
}
}
print_r($odt_meta);
?>

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ API (PHP 4), ΠΎΠ½ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ZIP-Π°Ρ€Ρ…ΠΈΠ², Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Π°Ρ€Ρ…ΠΈΠ²Π΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ содСрТимоС. Архив test2.zip, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· тСстовых Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² исходного дистрибутива ZZIPlib.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #4 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Zip

<?php

$zip
= zip_open("/tmp/test2.zip");

if (
$zip) {
while (
$zip_entry = zip_read($zip)) {
echo
"НазваниС: " . zip_entry_name($zip_entry) . "\n";
echo
"Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€: " . zip_entry_filesize($zip_entry) . "\n";
echo
"Π‘ΠΆΠ°Ρ‚Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€: " . zip_entry_compressedsize($zip_entry) . "\n";
echo
"ΠœΠ΅Ρ‚ΠΎΠ΄ сТатия: " . zip_entry_compressionmethod($zip_entry) . "\n";

if (
zip_entry_open($zip, $zip_entry, "r")) {
echo
"Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ„Π°ΠΉΠ»Π°:\n";
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo
"$buf\n";

zip_entry_close($zip_entry);
}
echo
"\n";

}

zip_close($zip);

}
?>
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 4 notes

up
41
info at peterhofer dot ch ΒΆ
17 years ago
All these examples will not work if the php script has no write access within the folder. 

Although you may say this is obvious, I found that in this case, $zip->open("name", ZIPARCHIVE::CREATE) doesn't return an error as it might not try to access the file system but rather allocates memory. 

It is only $zip->close() that returns the error. This might cause you seeking at the wrong end.
up
8
webmaster @ anonymous ΒΆ
12 years ago
you can use this code for reading JAR files (java archives)

JAR files use the same ZIP format, so can be easily read

$zf = zip_open(realpath('D:/lucene/allinone/lucene-core.jar')); $i=1;
while($zf && $ze = zip_read($zf)) {
    $zi[$i]['zip entry name']= zip_entry_name($ze);
    $zi[$i]['zip entry filesize']= zip_entry_filesize($ze);
    $zi[$i]['zip entry compressed size']= zip_entry_compressedsize($ze);
    $zi[$i]['zip entry compression method']= zip_entry_compressionmethod($ze);
    $zi[$i]['zip entry open status'] = zip_entry_open($zf,$ze);
    //$zi[$i]['zip entry file contents'] = zip_entry_read($ze,100);
    $i++;
}
print_r($zi);
zip_close($zf);
up
11
geandjay at gmail dot com ΒΆ
18 years ago
<?php
        $zip = new ZipArchive;
    $zip->open('teste.zip');
    $zip->extractTo('./');
    $zip->close();
        echo "Ok!";
?>
up
-1
Stefano Di Paolo ΒΆ
17 years ago
1) If you want to add files to a ZIP archive but you don't know if the ZiP file exists or not, you MUST check: this changes the way you open it !.
2) you can not append multiple flags, can use only one (or none).

If the zip does not exists, open it with: 
$ziph->open($archiveFile, ZIPARCHIVE::CM_PKWARE_IMPLODE)
(or a different compression method)

If the zip already exists, open it with:
$ziph->open($archiveFile)
or
$ziph->open($archiveFile, ZIPARCHIVE::CHECKCONS)

Example: make backup files every hour and ZIP them all in a daily ZIP archive, so you want to get only one ZIP per day, each ZIP containing 24 files:
<?php
  function archivebackup($archiveFile, $file, &$errMsg)
  {
    $ziph = new ZipArchive();
    if(file_exists($archiveFile))
    {
      if($ziph->open($archiveFile, ZIPARCHIVE::CHECKCONS) !== TRUE)
      {
        $errMsg = "Unable to Open $archiveFile";
        return 1;
      }
    }
    else
    {
      if($ziph->open($archiveFile, ZIPARCHIVE::CM_PKWARE_IMPLODE) !== TRUE)
      {
        $errMsg = "Could not Create $archiveFile";
        return 1;
      }
    }
    if(!$ziph->addFile($file))
    {
      $errMsg = "error archiving $file in $archiveFile";
      return 2;
    }
    $ziph->close();
    
    return 0;
  }
?>