Funções para arquivos Zip
Introdução
Esta extenção habilita você a transparentemente ler ou escrever arquivos compactados ZIP e os arquivos do mesmo.
Dependências
PHP 4
A versão embutida do PHP 4 requer » ZZIPlib, criada por Guido Draheim, versão 0.10.6 ou superior
PHP 5.2.0 or later
Esta extenção usa funções da » zlib criada por Jean-loup Gailly e Mark Adler.
Instalação
PHP 4
Nota: O suporte a Zip antes do PHP 4.1.0 é experimental.
Por causa da extensão zip no PHP 4 zip não ser mantida nós recomendamos que a extensão PECL seja usada.
Sistemas Linux
Para usar estas funções você precisa compilar o PHP com suporte a zip usando a opção de configuração --with-zip[=DIR], onde [DIR] é o prefixo da biblioteca instalada » ZZIPlib.
Windows
Usuários Windows precisam habilitar php_zip.dll no php.ini para usar estas funções.
PHP 5.2.0 e superior
Sistemas Linux
Para usar estas funções você precisa compilar o PHP com suporte a zip usando a opção de configuração --enable-zip.
Windows
Usuários Windows precisam habilitar php_zip.dll no php.ini para usar estas funções.
Instalação via PECL
Informações para a instalação desta extensão PECL podem ser encontradas no manual no capitulo entitulado Instalação de extensões PECL. Informações adicionais como novas versões, downloads, arquivos fontes, manutenções, e um Changelog, podem ser obtidos aqui: » https://pecl.php.net/package/zip.
A DLL para esta extensão PECL deve ser copiada da pagina de » Downloads do PHP ou de » https://pecl4win.php.net/
No PHP esta DLL reside no diretório extensions/ junto aos binários do PHP para Windows.
Configurações em execução
Esta extensão não define nenhum parâmetro de configuração no php.ini.
Tipos Resource
Há dois tipos de tipos resource usada neste módulo. O primeiro é um Zip directory para arquivo Zip, o segundo Zip Entry para entradas de arquivos.
Constantes pré-definidas
As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução.
ZipArchive uses class constants. There is three types of constants, Flags (FL_) errors (ER_) or mode (no prefix).
- ZIPARCHIVE::CREATE (integer)
- Create the archive if it does not exist.
- ZIPARCHIVE::OVERWRITE (integer)
- Always start a new archive, this mode will overwrite the file if it already exists.
- ZIPARCHIVE::EXCL (integer)
- Error if archive already exists.
- ZIPARCHIVE::CHECKCONS (integer)
- Perform additional consistency checks on the archive, and error if they fail.
- ZIPARCHIVE::FL_NOCASE (integer)
- Ignore case on name lookup
- ZIPARCHIVE::FL_NODIR (integer)
- Ignore directory component
- ZIPARCHIVE::FL_COMPRESSED (integer)
- Read compressed data
- ZIPARCHIVE::FL_UNCHANGED (integer)
- Use original data, ignoring changes.
- ZIPARCHIVE::CM_DEFAULT (integer)
- better of deflate or store.
- ZIPARCHIVE::CM_STORE (integer)
- stored (uncompressed).
- ZIPARCHIVE::CM_SHRINK (integer)
- shrunk
- ZIPARCHIVE::CM_REDUCE_1 (integer)
- reduced with factor 1
- ZIPARCHIVE::CM_REDUCE_2 (integer)
- reduced with factor 2
- ZIPARCHIVE::CM_REDUCE_3 (integer)
- reduced with factor 3
- ZIPARCHIVE::CM_REDUCE_4 (integer)
- reduced with factor 4
- ZIPARCHIVE::CM_IMPLODE (integer)
- imploded
- ZIPARCHIVE::CM_DEFLATE (integer)
- deflated
- ZIPARCHIVE::CM_DEFLATE64 (integer)
- deflate64
- ZIPARCHIVE::CM_PKWARE_IMPLODE (integer)
- PKWARE imploding
- ZIPARCHIVE::CM_BZIP2 (integer)
- BZIP2 algorithm
- ZIPARCHIVE::ER_OK (integer)
- No error.
- ZIPARCHIVE::ER_MULTIDISK (integer)
- Multi-disk zip archives not supported.
- ZIPARCHIVE::ER_RENAME (integer)
- Renaming temporary file failed.
- ZIPARCHIVE::ER_CLOSE (integer)
- Closing zip archive failed
- ZIPARCHIVE::ER_SEEK (integer)
- Seek error
- ZIPARCHIVE::ER_READ (integer)
- Read error
- ZIPARCHIVE::ER_WRITE (integer)
- Write error
- ZIPARCHIVE::ER_CRC (integer)
- CRC error
- ZIPARCHIVE::ER_ZIPCLOSED (integer)
- Containing zip archive was closed
- ZIPARCHIVE::ER_NOENT (integer)
- No such file.
- ZIPARCHIVE::ER_EXISTS (integer)
- File already exists
- ZIPARCHIVE::ER_OPEN (integer)
- Can't open file
- ZIPARCHIVE::ER_TMPOPEN (integer)
- Failure to create temporary file.
- ZIPARCHIVE::ER_ZLIB (integer)
- Zlib error
- ZIPARCHIVE::ER_MEMORY (integer)
- Memory allocation failure
- ZIPARCHIVE::ER_CHANGED (string)
- Entry has been changed
- ZIPARCHIVE::ER_COMPNOTSUPP (integer)
- Compression method not supported.
- ZIPARCHIVE::ER_EOF (integer)
- Premature EOF
- ZIPARCHIVE::ER_INVAL (integer)
- Invalid argument
- ZIPARCHIVE::ER_NOZIP (integer)
- Not a zip archive
- ZIPARCHIVE::ER_INTERNAL (integer)
- Internal error
- ZIPARCHIVE::ER_INCONS (integer)
- Zip archive inconsistent
- ZIPARCHIVE::ER_REMOVE (integer)
- Can't remove file
- ZIPARCHIVE::ER_DELETED (integer)
- Entry has been deleted
Exemplos
Example#1 Criando um arquivo 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 Exibindo detalhes dos arquivos e listando-os
<?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";
?>
Example#3 Zip stream wrapper, lendo um OpenOffice meta info
<?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);
?>
Este exemplo usa a velha API (PHP 4), ela abre um arquivo ZIP, ler cada arquivo do arquivo e imprime o conteúdo deles. O arquivo test2.zip usado neste exemplo é um arquivo de teste do fonte da distruição ZZIPlib.
Example#4 Exemplo de uso
<?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);
}
?>
Índice
- zip_close — Fecha um arquivo ZIP
- zip_entry_close — Fecha o arquivo que está aberto
- zip_entry_compressedsize — Recupera o tamanho compactado do arquivo que está dentro do arquivo ZIP
- zip_entry_compressionmethod — Recupera qual o método de compressão foi utilizado no arquivo
- zip_entry_filesize — Retorna o tamanho do arquivo
- zip_entry_name — Retorna o nome do arquivo
- zip_entry_open — Abre um arquivo do arquivo ZIP
- zip_entry_read — Lê de um arquivo aberto
- zip_open — Abre um arquivo ZIPado
- zip_read — Lê a próxima entrada em um arquivo ZIPado
- 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::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::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.