Heim  >  Artikel  >  Backend-Entwicklung  >  PHP压缩与归档—Zip

PHP压缩与归档—Zip

伊谢尔伦
伊谢尔伦Original
2016-11-22 09:42:211317Durchsuche

此扩展可以让你透明地读写ZIP压缩文档以及它们里面的文件。

在PHP5.2以后,为了使用这些函数,必须在编译 PHP 时用 --enable-zip 配置选项来提供 zip 支持。

Example #1 创建一个 Zip 归档

<?php
    $zip = new ZipArchive();
    $filename = "./test112.zip";
    if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
        exit("cannot open <$filename>\n");
    }
    $zip->addFromString("testfilephp.txt" . time(), 
        "#1 This is a test string added as testfilephp.txt.\n");
    $zip->addFromString("testfilephp2.txt" . time(), 
        "#2 This is a test string added as testfilephp2.txt.\n");
    $zip->addFile($thisdir . "/too.php","/testfromfile.php");
    echo "numfiles: " . $zip->numFiles . "\n";
    echo "status:" . $zip->status . "\n";
    $zip->close();
?>

Example #2 输出文档细节和列表

<?php
    $za = new ZipArchive();
    $za->open(&#39;test_with_comment.zip&#39;);
    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";
?>

Example #3 Zip 流封装,读取一个 OpenOffice 文件的元信息

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

此例使用了旧的 API(PHP 4),它打开了一个 ZIP 文件归档,读取归档里的每个文件,并输出文件内容。此例用到的 test2.zip 文档是 ZZIPlib 源分布里测试文档中的一个。

Example #4 Zip 使用范例

<?php
    $zip = zip_open("/tmp/test2.zip");
    if ($zip) {
        while ($zip_entry = zip_read($zip)) {
            echo "Name: " . zip_entry_name($zip_entry) . "\n";
            echo "Actual Filesize: " . zip_entry_filesize($zip_entry) . "\n";
            echo "Compressed Size: " . zip_entry_compressedsize($zip_entry) . "\n";
            echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "\n";
            if (zip_entry_open($zip, $zip_entry, "r")) {
              echo "File Contents:\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);
    }
?>

 ZipArchive 类

ZipArchive::addEmptyDir — Add a new directory

ZipArchive::addFile — Adds a file to a ZIP archive from the given path

ZipArchive::addFromString — Add a file to a ZIP archive using its contents

ZipArchive::addGlob — Add files from a directory by glob pattern

ZipArchive::addPattern — Add files from a directory by PCRE pattern

ZipArchive::close — Close the active archive (opened or newly created)

ZipArchive::deleteIndex — delete an entry in the archive using its index

ZipArchive::deleteName — delete an entry in the archive using its name

ZipArchive::extractTo — Extract the archive contents

ZipArchive::getArchiveComment — Returns the Zip archive comment

ZipArchive::getCommentIndex — Returns the comment of an entry using the entry index

ZipArchive::getCommentName — Returns the comment of an entry using the entry name

ZipArchive::getFromIndex — Returns the entry contents using its index

ZipArchive::getFromName — Returns the entry contents using its name

ZipArchive::getNameIndex — Returns the name of an entry using its index

ZipArchive::getStatusString — Returns the status error message, system and/or zip messages

ZipArchive::getStream — Get a file handler to the entry defined by its name (read only).

ZipArchive::locateName — Returns the index of the entry in the archive

ZipArchive::open — Open a ZIP file archive

ZipArchive::renameIndex — Renames an entry defined by its index

ZipArchive::renameName — Renames an entry defined by its name

ZipArchive::setArchiveComment — Set the comment of a ZIP archive

ZipArchive::setCommentIndex — Set the comment of an entry defined by its index

ZipArchive::setCommentName — Set the comment of an entry defined by its name

ZipArchive::statIndex — Get the details of an entry defined by its index.

ZipArchive::statName — Get the details of an entry defined by its name.

ZipArchive::unchangeAll — Undo all changes done in the archive

ZipArchive::unchangeArchive — Revert all global changes done in the archive.

ZipArchive::unchangeIndex — Revert all changes done to an entry at the given index

ZipArchive::unchangeName — Revert all changes done to an entry with the given name.

相关函数

zip_close — Close a ZIP file archive

zip_entry_close — Close a directory entry

zip_entry_compressedsize — Retrieve the compressed size of a directory entry

zip_entry_compressionmethod — Retrieve the compression method of a directory entry

zip_entry_filesize — Retrieve the actual file size of a directory entry

zip_entry_name — Retrieve the name of a directory entry

zip_entry_open — Open a directory entry for reading

zip_entry_read — Read from an open directory entry

zip_open — Open a ZIP file archive

zip_read — Read next entry in a ZIP file archive


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP压缩与归档——ZlibNächster Artikel:PHP压缩与归档—Phar