mirror of
https://github.com/Ne-Lexa/php-zip.git
synced 2025-08-31 10:41:50 +02:00
solving problems with lack of memory, the new ZipReader and ZipWriter class, adds .phpstorm.meta.php
#13 #16 #27 #31 #41
This commit is contained in:
300
README.md
300
README.md
@@ -80,9 +80,9 @@ Latest stable version: [;
|
||||
try{
|
||||
$zipFile
|
||||
->addFromString("zip/entry/filename", "Is file content") // add an entry from the string
|
||||
->addFile("/path/to/file", "data/tofile") // add an entry from the file
|
||||
->addDir(__DIR__, "to/path/") // add files from the directory
|
||||
->addFromString('zip/entry/filename', 'Is file content') // add an entry from the string
|
||||
->addFile('/path/to/file', 'data/tofile') // add an entry from the file
|
||||
->addDir(__DIR__, 'to/path/') // add files from the directory
|
||||
->saveAsFile($outputFilename) // save the archive to a file
|
||||
->close(); // close archive
|
||||
|
||||
@@ -115,6 +115,8 @@ Other examples can be found in the `tests/` folder
|
||||
- [ZipFile::addDirRecursive](#Documentation-ZipFile-addDirRecursive) - adds files to the archive from the directory on the specified path with subdirectories.
|
||||
- [ZipFile::addEmptyDir](#Documentation-ZipFile-addEmptyDir) - add a new directory.
|
||||
- [ZipFile::addFile](#Documentation-ZipFile-addFile) - adds a file to a ZIP archive from the given path.
|
||||
- [ZipFile::addSplFile](#Documentation-ZipFile-addSplFile) - adds a `\SplFileInfo` to a ZIP archive.
|
||||
- [ZipFile::addFromFinder](#Documentation-ZipFile-addFromFinder) - adds files from the `Symfony\Component\Finder\Finder` to a ZIP archive.
|
||||
- [ZipFile::addFilesFromIterator](#Documentation-ZipFile-addFilesFromIterator) - adds files from the iterator of directories.
|
||||
- [ZipFile::addFilesFromGlob](#Documentation-ZipFile-addFilesFromGlob) - adds files from a directory by glob pattern without subdirectories.
|
||||
- [ZipFile::addFilesFromGlobRecursive](#Documentation-ZipFile-addFilesFromGlobRecursive) - adds files from a directory by glob pattern with subdirectories.
|
||||
@@ -192,12 +194,15 @@ $zipFile->openFromStream($stream);
|
||||
#### <a name="Documentation-Open-Zip-Entries"></a> Reading entries from the archive
|
||||
<a name="Documentation-ZipFile-count"></a> **ZipFile::count** - returns the number of entries in the archive.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
|
||||
$count = count($zipFile);
|
||||
// or
|
||||
$count = $zipFile->count();
|
||||
```
|
||||
<a name="Documentation-ZipFile-getListFiles"></a> **ZipFile::getListFiles** - returns list of archive files.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$listFiles = $zipFile->getListFiles();
|
||||
|
||||
// example array contents:
|
||||
@@ -205,11 +210,13 @@ $listFiles = $zipFile->getListFiles();
|
||||
// 0 => 'info.txt',
|
||||
// 1 => 'path/to/file.jpg',
|
||||
// 2 => 'another path/',
|
||||
// 3 => '0',
|
||||
// )
|
||||
```
|
||||
<a name="Documentation-ZipFile-getEntryContent"></a> **ZipFile::getEntryContent** - returns the entry contents using its name.
|
||||
```php
|
||||
// $entryName = 'path/to/example-entry-name.txt';
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
|
||||
$contents = $zipFile[$entryName];
|
||||
// or
|
||||
@@ -218,6 +225,7 @@ $contents = $zipFile->getEntryContents($entryName);
|
||||
<a name="Documentation-ZipFile-hasEntry"></a> **ZipFile::hasEntry** - checks if there is an entry in the archive.
|
||||
```php
|
||||
// $entryName = 'path/to/example-entry-name.txt';
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
|
||||
$hasEntry = isset($zipFile[$entryName]);
|
||||
// or
|
||||
@@ -226,23 +234,27 @@ $hasEntry = $zipFile->hasEntry($entryName);
|
||||
<a name="Documentation-ZipFile-isDirectory"></a> **ZipFile::isDirectory** - checks that the entry in the archive is a directory.
|
||||
```php
|
||||
// $entryName = 'path/to/';
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
|
||||
$isDirectory = $zipFile->isDirectory($entryName);
|
||||
```
|
||||
<a name="Documentation-ZipFile-extractTo"></a> **ZipFile::extractTo** - extract the archive contents.
|
||||
The directory must exist.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->extractTo($directory);
|
||||
```
|
||||
Extract some files to the directory.
|
||||
The directory must exist.
|
||||
```php
|
||||
// $toDirectory = '/tmp';
|
||||
$extractOnlyFiles = [
|
||||
"filename1",
|
||||
"filename2",
|
||||
"dir/dir/dir/"
|
||||
'filename1',
|
||||
'filename2',
|
||||
'dir/dir/dir/'
|
||||
];
|
||||
$zipFile->extractTo($directory, $extractOnlyFiles);
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->extractTo($toDirectory, $extractOnlyFiles);
|
||||
```
|
||||
#### <a name="Documentation-Zip-Iterate"></a> Iterating entries
|
||||
`ZipFile` is an iterator.
|
||||
@@ -251,7 +263,7 @@ Can iterate all the entries in the `foreach` loop.
|
||||
foreach($zipFile as $entryName => $contents){
|
||||
echo "Filename: $entryName" . PHP_EOL;
|
||||
echo "Contents: $contents" . PHP_EOL;
|
||||
echo "-----------------------------" . PHP_EOL;
|
||||
echo '-----------------------------' . PHP_EOL;
|
||||
}
|
||||
```
|
||||
Can iterate through the `Iterator`.
|
||||
@@ -264,7 +276,7 @@ while ($iterator->valid())
|
||||
|
||||
echo "Filename: $entryName" . PHP_EOL;
|
||||
echo "Contents: $contents" . PHP_EOL;
|
||||
echo "-----------------------------" . PHP_EOL;
|
||||
echo '-----------------------------' . PHP_EOL;
|
||||
|
||||
$iterator->next();
|
||||
}
|
||||
@@ -272,121 +284,100 @@ while ($iterator->valid())
|
||||
#### <a name="Documentation-Zip-Info"></a> Getting information about entries
|
||||
<a name="Documentation-ZipFile-getArchiveComment"></a> **ZipFile::getArchiveComment** - returns the Zip archive comment.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$commentArchive = $zipFile->getArchiveComment();
|
||||
```
|
||||
<a name="Documentation-ZipFile-getEntryComment"></a> **ZipFile::getEntryComment** - returns the comment of an entry using the entry name.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$commentEntry = $zipFile->getEntryComment($entryName);
|
||||
```
|
||||
<a name="Documentation-ZipFile-getEntryInfo"></a> **ZipFile::getEntryInfo** - returns detailed information about the entry in the archive
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipInfo = $zipFile->getEntryInfo('file.txt');
|
||||
|
||||
$arrayInfo = $zipInfo->toArray();
|
||||
// example array contents:
|
||||
// array (
|
||||
// 'name' => 'file.gif',
|
||||
// 'folder' => false,
|
||||
// 'size' => '43',
|
||||
// 'compressed_size' => '43',
|
||||
// 'modified' => 1510489440,
|
||||
// 'created' => null,
|
||||
// 'accessed' => null,
|
||||
// 'attributes' => '-rw-r--r--',
|
||||
// 'encrypted' => false,
|
||||
// 'encryption_method' => 0,
|
||||
// 'comment' => '',
|
||||
// 'crc' => 782934147,
|
||||
// 'method_name' => 'No compression',
|
||||
// 'compression_method' => 0,
|
||||
// 'platform' => 'UNIX',
|
||||
// 'version' => 10,
|
||||
// )
|
||||
|
||||
print_r($zipInfo);
|
||||
// output:
|
||||
//PhpZip\Model\ZipInfo Object
|
||||
//(
|
||||
// [name:PhpZip\Model\ZipInfo:private] => file.gif
|
||||
// [folder:PhpZip\Model\ZipInfo:private] =>
|
||||
// [size:PhpZip\Model\ZipInfo:private] => 43
|
||||
// [compressedSize:PhpZip\Model\ZipInfo:private] => 43
|
||||
// [mtime:PhpZip\Model\ZipInfo:private] => 1510489324
|
||||
// [ctime:PhpZip\Model\ZipInfo:private] =>
|
||||
// [atime:PhpZip\Model\ZipInfo:private] =>
|
||||
// [encrypted:PhpZip\Model\ZipInfo:private] =>
|
||||
// [comment:PhpZip\Model\ZipInfo:private] =>
|
||||
// [crc:PhpZip\Model\ZipInfo:private] => 782934147
|
||||
// [methodName:PhpZip\Model\ZipInfo:private] => No compression
|
||||
// [compressionMethod:PhpZip\Model\ZipInfo:private] => 0
|
||||
// [platform:PhpZip\Model\ZipInfo:private] => UNIX
|
||||
// [version:PhpZip\Model\ZipInfo:private] => 10
|
||||
// [attributes:PhpZip\Model\ZipInfo:private] => -rw-r--r--
|
||||
// [encryptionMethod:PhpZip\Model\ZipInfo:private] => 0
|
||||
// [compressionLevel:PhpZip\Model\ZipInfo:private] => -1
|
||||
//)
|
||||
|
||||
echo $zipInfo;
|
||||
// Output:
|
||||
// PhpZip\Model\ZipInfo {Name="file.gif", Size="43 bytes", Compressed size="43 bytes", Modified time="2017-11-12T15:22:04+03:00", Crc=0x2eaaa083, Method name="No compression", Attributes="-rw-r--r--", Platform="UNIX", Version=10}
|
||||
```
|
||||
<a name="Documentation-ZipFile-getAllInfo"></a> **ZipFile::getAllInfo** - returns detailed information about all entries in the archive.
|
||||
```php
|
||||
$zipAllInfo = $zipFile->getAllInfo();
|
||||
|
||||
print_r($zipAllInfo);
|
||||
//Array
|
||||
//(
|
||||
// [file.txt] => PhpZip\Model\ZipInfo Object
|
||||
// (
|
||||
// ...
|
||||
// )
|
||||
//
|
||||
// [file2.txt] => PhpZip\Model\ZipInfo Object
|
||||
// (
|
||||
// ...
|
||||
// )
|
||||
//
|
||||
// ...
|
||||
//)
|
||||
```
|
||||
#### <a name="Documentation-Add-Zip-Entries"></a> Adding entries to the archive
|
||||
|
||||
All methods of adding entries to a ZIP archive allow you to specify a method for compressing content.
|
||||
|
||||
The following methods of compression are available:
|
||||
- `\PhpZip\ZipFile::METHOD_STORED` - no compression
|
||||
- `\PhpZip\ZipFile::METHOD_DEFLATED` - Deflate compression
|
||||
- `\PhpZip\ZipFile::METHOD_BZIP2` - Bzip2 compression with the extension `ext-bz2`
|
||||
- `\PhpZip\Constants\ZipCompressionMethod::STORED` - no compression
|
||||
- `\PhpZip\Constants\ZipCompressionMethod::DEFLATED` - Deflate compression
|
||||
- `\PhpZip\Constants\ZipCompressionMethod::BZIP2` - Bzip2 compression with the extension `ext-bz2`
|
||||
|
||||
<a name="Documentation-ZipFile-addFile"></a> **ZipFile::addFile** - adds a file to a ZIP archive from the given path.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
// $file = '...../file.ext';
|
||||
// $entryName = 'file2.ext'
|
||||
$zipFile->addFile($file);
|
||||
|
||||
// you can specify the name of the entry in the archive (if null, then the last component from the file name is used)
|
||||
$zipFile->addFile($file, $entryName);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFile($file, $entryName, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addFile($file, $entryName, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addFile($file, $entryName, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
<a name="Documentation-ZipFile-addSplFile"></a>
|
||||
**ZipFile::addSplFile"** - adds a `\SplFileInfo` to a ZIP archive.
|
||||
```php
|
||||
// $file = '...../file.ext';
|
||||
// $entryName = 'file2.ext'
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
|
||||
$splFile = new \SplFileInfo('README.md');
|
||||
|
||||
$zipFile->addSplFile($splFile);
|
||||
$zipFile->addSplFile($splFile, $entryName);
|
||||
// or
|
||||
$zipFile[$entryName] = new \SplFileInfo($file);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFile($file, $entryName, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addFile($file, $entryName, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addFile($file, $entryName, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
// set compression method
|
||||
$zipFile->addSplFile($splFile, $entryName, $options = [
|
||||
\PhpZip\Constants\ZipOptions::COMPRESSION_METHOD => \PhpZip\Constants\ZipCompressionMethod::DEFLATED,
|
||||
]);
|
||||
```
|
||||
<a name="Documentation-ZipFile-addFromFinder"></a>
|
||||
**ZipFile::addFromFinder"** - adds files from the `Symfony\Component\Finder\Finder` to a ZIP archive.
|
||||
https://symfony.com/doc/current/components/finder.html
|
||||
```php
|
||||
$finder = new \Symfony\Component\Finder\Finder();
|
||||
$finder
|
||||
->files()
|
||||
->name('*.{jpg,jpeg,gif,png}')
|
||||
->name('/^[0-9a-f]\./')
|
||||
->contains('/lorem\s+ipsum$/i')
|
||||
->in('path');
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->addFromFinder($finder, $options = [
|
||||
\PhpZip\Constants\ZipOptions::COMPRESSION_METHOD => \PhpZip\Constants\ZipCompressionMethod::DEFLATED,
|
||||
\PhpZip\Constants\ZipOptions::MODIFIED_TIME => new \DateTimeImmutable('-1 day 5 min')
|
||||
]);
|
||||
```
|
||||
<a name="Documentation-ZipFile-addFromString"></a> **ZipFile::addFromString** - adds a file to a ZIP archive using its contents.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
|
||||
$zipFile[$entryName] = $contents;
|
||||
// or
|
||||
$zipFile->addFromString($entryName, $contents);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFromString($entryName, $contents, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addFromString($entryName, $contents, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addFromString($entryName, $contents, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addFromString($entryName, $contents, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addFromString($entryName, $contents, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addFromString($entryName, $contents, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
<a name="Documentation-ZipFile-addFromStream"></a> **ZipFile::addFromStream** - adds a entry from the stream to the ZIP archive.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
// $stream = fopen(..., 'rb');
|
||||
|
||||
$zipFile->addFromStream($stream, $entryName);
|
||||
@@ -394,14 +385,14 @@ $zipFile->addFromStream($stream, $entryName);
|
||||
$zipFile[$entryName] = $stream;
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFromStream($stream, $entryName, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addFromStream($stream, $entryName, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addFromStream($stream, $entryName, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addFromStream($stream, $entryName, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addFromStream($stream, $entryName, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addFromStream($stream, $entryName, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
<a name="Documentation-ZipFile-addEmptyDir"></a> **ZipFile::addEmptyDir** - add a new directory.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
// $path = "path/to/";
|
||||
|
||||
$zipFile->addEmptyDir($path);
|
||||
// or
|
||||
$zipFile[$path] = null;
|
||||
@@ -411,67 +402,71 @@ $zipFile[$path] = null;
|
||||
$entries = [
|
||||
'file.txt' => 'file contents', // add an entry from the string contents
|
||||
'empty dir/' => null, // add empty directory
|
||||
'path/to/file.jpg' => fopen('..../filename', 'r'), // add an entry from the stream
|
||||
'path/to/file.jpg' => fopen('..../filename', 'rb'), // add an entry from the stream
|
||||
'path/to/file.dat' => new \SplFileInfo('..../filename'), // add an entry from the file
|
||||
];
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->addAll($entries);
|
||||
```
|
||||
<a name="Documentation-ZipFile-addDir"></a> **ZipFile::addDir** - adds files to the archive from the directory on the specified path without subdirectories.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->addDir($dirName);
|
||||
|
||||
// you can specify the path in the archive to which you want to put entries
|
||||
$localPath = "to/path/";
|
||||
$localPath = 'to/path/';
|
||||
$zipFile->addDir($dirName, $localPath);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addDir($dirName, $localPath, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addDir($dirName, $localPath, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addDir($dirName, $localPath, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addDir($dirName, $localPath, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addDir($dirName, $localPath, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addDir($dirName, $localPath, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
<a name="Documentation-ZipFile-addDirRecursive"></a> **ZipFile::addDirRecursive** - adds files to the archive from the directory on the specified path with subdirectories.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->addDirRecursive($dirName);
|
||||
|
||||
// you can specify the path in the archive to which you want to put entries
|
||||
$localPath = "to/path/";
|
||||
$localPath = 'to/path/';
|
||||
$zipFile->addDirRecursive($dirName, $localPath);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addDirRecursive($dirName, $localPath, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addDirRecursive($dirName, $localPath, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addDirRecursive($dirName, $localPath, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addDirRecursive($dirName, $localPath, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addDirRecursive($dirName, $localPath, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addDirRecursive($dirName, $localPath, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
<a name="Documentation-ZipFile-addFilesFromIterator"></a> **ZipFile::addFilesFromIterator** - adds files from the iterator of directories.
|
||||
```php
|
||||
// $directoryIterator = new \DirectoryIterator($dir); // without subdirectories
|
||||
// $directoryIterator = new \RecursiveDirectoryIterator($dir); // with subdirectories
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->addFilesFromIterator($directoryIterator);
|
||||
|
||||
// you can specify the path in the archive to which you want to put entries
|
||||
$localPath = "to/path/";
|
||||
$localPath = 'to/path/';
|
||||
$zipFile->addFilesFromIterator($directoryIterator, $localPath);
|
||||
// or
|
||||
$zipFile[$localPath] = $directoryIterator;
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFilesFromIterator($directoryIterator, $localPath, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addFilesFromIterator($directoryIterator, $localPath, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromIterator($directoryIterator, $localPath, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addFilesFromIterator($directoryIterator, $localPath, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addFilesFromIterator($directoryIterator, $localPath, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromIterator($directoryIterator, $localPath, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
Example with some files ignoring:
|
||||
```php
|
||||
$ignoreFiles = [
|
||||
"file_ignore.txt",
|
||||
"dir_ignore/sub dir ignore/"
|
||||
'file_ignore.txt',
|
||||
'dir_ignore/sub dir ignore/'
|
||||
];
|
||||
|
||||
// $directoryIterator = new \DirectoryIterator($dir); // without subdirectories
|
||||
// $directoryIterator = new \RecursiveDirectoryIterator($dir); // with subdirectories
|
||||
|
||||
// use \PhpZip\Util\Iterator\IgnoreFilesFilterIterator for non-recursive search
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$ignoreIterator = new \PhpZip\Util\Iterator\IgnoreFilesRecursiveFilterIterator(
|
||||
$directoryIterator,
|
||||
$ignoreFiles
|
||||
@@ -483,123 +478,138 @@ $zipFile->addFilesFromIterator($ignoreIterator);
|
||||
```php
|
||||
$globPattern = '**.{jpg,jpeg,png,gif}'; // example glob pattern -> add all .jpg, .jpeg, .png and .gif files
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->addFilesFromGlob($dir, $globPattern);
|
||||
|
||||
// you can specify the path in the archive to which you want to put entries
|
||||
$localPath = "to/path/";
|
||||
$localPath = 'to/path/';
|
||||
$zipFile->addFilesFromGlob($dir, $globPattern, $localPath);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFilesFromGlob($dir, $globPattern, $localPath, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addFilesFromGlob($dir, $globPattern, $localPath, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromGlob($dir, $globPattern, $localPath, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addFilesFromGlob($dir, $globPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addFilesFromGlob($dir, $globPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromGlob($dir, $globPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
<a name="Documentation-ZipFile-addFilesFromGlobRecursive"></a> **ZipFile::addFilesFromGlobRecursive** - adds files from a directory by [glob pattern](https://en.wikipedia.org/wiki/Glob_(programming)) with subdirectories.
|
||||
```php
|
||||
$globPattern = '**.{jpg,jpeg,png,gif}'; // example glob pattern -> add all .jpg, .jpeg, .png and .gif files
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->addFilesFromGlobRecursive($dir, $globPattern);
|
||||
|
||||
// you can specify the path in the archive to which you want to put entries
|
||||
$localPath = "to/path/";
|
||||
$localPath = 'to/path/';
|
||||
$zipFile->addFilesFromGlobRecursive($dir, $globPattern, $localPath);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFilesFromGlobRecursive($dir, $globPattern, $localPath, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addFilesFromGlobRecursive($dir, $globPattern, $localPath, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromGlobRecursive($dir, $globPattern, $localPath, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addFilesFromGlobRecursive($dir, $globPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addFilesFromGlobRecursive($dir, $globPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromGlobRecursive($dir, $globPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
<a name="Documentation-ZipFile-addFilesFromRegex"></a> **ZipFile::addFilesFromRegex** - adds files from a directory by [PCRE pattern](https://en.wikipedia.org/wiki/Regular_expression) without subdirectories.
|
||||
```php
|
||||
$regexPattern = '/\.(jpe?g|png|gif)$/si'; // example regex pattern -> add all .jpg, .jpeg, .png and .gif files
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->addFilesFromRegex($dir, $regexPattern);
|
||||
|
||||
// you can specify the path in the archive to which you want to put entries
|
||||
$localPath = "to/path/";
|
||||
$localPath = 'to/path/';
|
||||
$zipFile->addFilesFromRegex($dir, $regexPattern, $localPath);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFilesFromRegex($dir, $regexPattern, $localPath, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addFilesFromRegex($dir, $regexPattern, $localPath, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromRegex($dir, $regexPattern, $localPath, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addFilesFromRegex($dir, $regexPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addFilesFromRegex($dir, $regexPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromRegex($dir, $regexPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
<a name="Documentation-ZipFile-addFilesFromRegexRecursive"></a> **ZipFile::addFilesFromRegexRecursive** - adds files from a directory by [PCRE pattern](https://en.wikipedia.org/wiki/Regular_expression) with subdirectories.
|
||||
```php
|
||||
$regexPattern = '/\.(jpe?g|png|gif)$/si'; // example regex pattern -> add all .jpg, .jpeg, .png and .gif files
|
||||
|
||||
|
||||
$zipFile->addFilesFromRegexRecursive($dir, $regexPattern);
|
||||
|
||||
// you can specify the path in the archive to which you want to put entries
|
||||
$localPath = "to/path/";
|
||||
$localPath = 'to/path/';
|
||||
$zipFile->addFilesFromRegexRecursive($dir, $regexPattern, $localPath);
|
||||
|
||||
// you can specify a compression method
|
||||
$zipFile->addFilesFromRegexRecursive($dir, $regexPattern, $localPath, ZipFile::METHOD_STORED); // No compression
|
||||
$zipFile->addFilesFromRegexRecursive($dir, $regexPattern, $localPath, ZipFile::METHOD_DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromRegexRecursive($dir, $regexPattern, $localPath, ZipFile::METHOD_BZIP2); // BZIP2 compression
|
||||
$zipFile->addFilesFromRegexRecursive($dir, $regexPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::STORED); // No compression
|
||||
$zipFile->addFilesFromRegexRecursive($dir, $regexPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::DEFLATED); // Deflate compression
|
||||
$zipFile->addFilesFromRegexRecursive($dir, $regexPattern, $localPath, \PhpZip\Constants\ZipCompressionMethod::BZIP2); // BZIP2 compression
|
||||
```
|
||||
#### <a name="Documentation-Remove-Zip-Entries"></a> Deleting entries from the archive
|
||||
<a name="Documentation-ZipFile-deleteFromName"></a> **ZipFile::deleteFromName** - deletes an entry in the archive using its name.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->deleteFromName($entryName);
|
||||
```
|
||||
<a name="Documentation-ZipFile-deleteFromGlob"></a> **ZipFile::deleteFromGlob** - deletes a entries in the archive using [glob pattern](https://en.wikipedia.org/wiki/Glob_(programming)).
|
||||
```php
|
||||
$globPattern = '**.{jpg,jpeg,png,gif}'; // example glob pattern -> delete all .jpg, .jpeg, .png and .gif files
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->deleteFromGlob($globPattern);
|
||||
```
|
||||
<a name="Documentation-ZipFile-deleteFromRegex"></a> **ZipFile::deleteFromRegex** - deletes a entries in the archive using [PCRE pattern](https://en.wikipedia.org/wiki/Regular_expression).
|
||||
```php
|
||||
$regexPattern = '/\.(jpe?g|png|gif)$/si'; // example regex pattern -> delete all .jpg, .jpeg, .png and .gif files
|
||||
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->deleteFromRegex($regexPattern);
|
||||
```
|
||||
<a name="Documentation-ZipFile-deleteAll"></a> **ZipFile::deleteAll** - deletes all entries in the ZIP archive.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->deleteAll();
|
||||
```
|
||||
#### <a name="Documentation-Entries"></a> Working with entries and archive
|
||||
<a name="Documentation-ZipFile-rename"></a> **ZipFile::rename** - renames an entry defined by its name.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->rename($oldName, $newName);
|
||||
```
|
||||
<a name="Documentation-ZipFile-setCompressionLevel"></a> **ZipFile::setCompressionLevel** - set the compression level for all files in the archive.
|
||||
|
||||
> _Note that this method does not apply to entries that are added after this method is run._
|
||||
|
||||
By default, the compression level is -1 (`\PhpZip\ZipFile::LEVEL_DEFAULT_COMPRESSION`) or the compression level specified in the archive for Deflate compression.
|
||||
By default, the compression level is 5 (`\PhpZip\Constants\ZipCompressionLevel::NORMAL`) or the compression level specified in the archive for Deflate compression.
|
||||
|
||||
The values -1 (`\PhpZip\ZipFile::LEVEL_DEFAULT_COMPRESSION`) and the range from 1 (`\PhpZip\ZipFile::LEVEL_BEST_SPEED`) to 9 (`\PhpZip\ZipFile::LEVEL_BEST_COMPRESSION`) are supported. The higher the number, the better and longer the compression.
|
||||
The values range from 1 (`\PhpZip\Constants\ZipCompressionLevel::SUPER_FAST`) to 9 (`\PhpZip\Constants\ZipCompressionLevel::MAXIMUM`) are supported. The higher the number, the better and longer the compression.
|
||||
```php
|
||||
$zipFile->setCompressionLevel(\PhpZip\ZipFile::LEVEL_BEST_COMPRESSION);
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->setCompressionLevel(\PhpZip\Constants\ZipCompressionLevel::MAXIMUM);
|
||||
```
|
||||
<a name="Documentation-ZipFile-setCompressionLevelEntry"></a> **ZipFile::setCompressionLevelEntry** - sets the compression level for the entry by its name.
|
||||
|
||||
The values -1 (`\PhpZip\ZipFile::LEVEL_DEFAULT_COMPRESSION`) and the range from 1 (`\PhpZip\ZipFile::LEVEL_BEST_SPEED`) to 9 (`\PhpZip\ZipFile::LEVEL_BEST_COMPRESSION`) are supported. The higher the number, the better and longer the compression.
|
||||
The values range from 1 (`\PhpZip\Constants\ZipCompressionLevel::SUPER_FAST`) to 9 (`\PhpZip\Constants\ZipCompressionLevel::MAXIMUM`) are supported. The higher the number, the better and longer the compression.
|
||||
```php
|
||||
$zipFile->setCompressionLevelEntry($entryName, \PhpZip\ZipFile::LEVEL_BEST_COMPRESSION);
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->setCompressionLevelEntry($entryName, \PhpZip\Constants\ZipCompressionLevel::FAST);
|
||||
```
|
||||
<a name="Documentation-ZipFile-setCompressionMethodEntry"></a> **ZipFile::setCompressionMethodEntry** - sets the compression method for the entry by its name.
|
||||
|
||||
The following compression methods are available:
|
||||
- `\PhpZip\ZipFile::METHOD_STORED` - No compression
|
||||
- `\PhpZip\ZipFile::METHOD_DEFLATED` - Deflate compression
|
||||
- `\PhpZip\ZipFile::METHOD_BZIP2` - Bzip2 compression with the extension `ext-bz2`
|
||||
- `\PhpZip\Constants\ZipCompressionMethod::STORED` - No compression
|
||||
- `\PhpZip\Constants\ZipCompressionMethod::DEFLATED` - Deflate compression
|
||||
- `\PhpZip\Constants\ZipCompressionMethod::BZIP2` - Bzip2 compression with the extension `ext-bz2`
|
||||
```php
|
||||
$zipFile->setCompressionMethodEntry($entryName, ZipFile::METHOD_DEFLATED);
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->setCompressionMethodEntry($entryName, \PhpZip\Constants\ZipCompressionMethod::DEFLATED);
|
||||
```
|
||||
<a name="Documentation-ZipFile-setArchiveComment"></a> **ZipFile::setArchiveComment** - set the comment of a ZIP archive.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->setArchiveComment($commentArchive);
|
||||
```
|
||||
<a name="Documentation-ZipFile-setEntryComment"></a> **ZipFile::setEntryComment** - set the comment of an entry defined by its name.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile->setEntryComment($entryName, $comment);
|
||||
```
|
||||
<a name="Documentation-ZipFile-matcher"></a> **ZipFile::matcher** - selecting entries in the archive to perform operations on them.
|
||||
```php
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$matcher = $zipFile->matcher();
|
||||
```
|
||||
Selecting files from the archive one at a time:
|
||||
@@ -638,7 +648,7 @@ $entries = $matcher->getMatches();
|
||||
invoke() - invoke a callable function on selected entries:
|
||||
```php
|
||||
// example
|
||||
$matcher->invoke(function($entryName) use($zipFile) {
|
||||
$matcher->invoke(static function($entryName) use($zipFile) {
|
||||
$newName = preg_replace('~\.(jpe?g)$~i', '.no_optimize.$1', $entryName);
|
||||
$zipFile->rename($entryName, $newName);
|
||||
});
|
||||
@@ -654,10 +664,10 @@ $matcher->disableEncryption(); // disables encryption for selected entries
|
||||
#### <a name="Documentation-Password"></a> Working with passwords
|
||||
|
||||
Implemented support for encryption methods:
|
||||
- `\PhpZip\ZipFile::ENCRYPTION_METHOD_TRADITIONAL` - Traditional PKWARE encryption
|
||||
- `\PhpZip\ZipFile::ENCRYPTION_METHOD_WINZIP_AES_256` - WinZip AES encryption 256 bit (recommended)
|
||||
- `\PhpZip\ZipFile::ENCRYPTION_METHOD_WINZIP_AES_192` - WinZip AES encryption 192 bit
|
||||
- `\PhpZip\ZipFile::ENCRYPTION_METHOD_WINZIP_AES_128` - WinZip AES encryption 128 bit
|
||||
- `\PhpZip\Constants\ZipEncryptionMethod::PKWARE` - Traditional PKWARE encryption (legacy)
|
||||
- `\PhpZip\Constants\ZipEncryptionMethod::WINZIP_AES_256` - WinZip AES encryption 256 bit (recommended)
|
||||
- `\PhpZip\Constants\ZipEncryptionMethod::WINZIP_AES_192` - WinZip AES encryption 192 bit
|
||||
- `\PhpZip\Constants\ZipEncryptionMethod::WINZIP_AES_128` - WinZip AES encryption 128 bit
|
||||
|
||||
<a name="Documentation-ZipFile-setReadPassword"></a> **ZipFile::setReadPassword** - set the password for the open archive.
|
||||
|
||||
@@ -677,7 +687,7 @@ $zipFile->setPassword($password);
|
||||
```
|
||||
You can set the encryption method:
|
||||
```php
|
||||
$encryptionMethod = ZipFile::ENCRYPTION_METHOD_WINZIP_AES_256;
|
||||
$encryptionMethod = \PhpZip\Constants\ZipEncryptionMethod::WINZIP_AES_256;
|
||||
$zipFile->setPassword($password, $encryptionMethod);
|
||||
```
|
||||
<a name="Documentation-ZipFile-setPasswordEntry"></a> **ZipFile::setPasswordEntry** - sets a new password of an entry defined by its name.
|
||||
@@ -686,7 +696,7 @@ $zipFile->setPasswordEntry($entryName, $password);
|
||||
```
|
||||
You can set the encryption method:
|
||||
```php
|
||||
$encryptionMethod = ZipFile::ENCRYPTION_METHOD_WINZIP_AES_256;
|
||||
$encryptionMethod = \PhpZip\Constants\ZipEncryptionMethod::WINZIP_AES_256;
|
||||
$zipFile->setPasswordEntry($entryName, $password, $encryptionMethod);
|
||||
```
|
||||
<a name="Documentation-ZipFile-disableEncryption"></a> **ZipFile::disableEncryption** - disable encryption for all entries that are already in the archive.
|
||||
@@ -744,7 +754,7 @@ $zipFile->outputAsAttachment($outputFilename);
|
||||
```
|
||||
You can set the Mime-Type:
|
||||
```php
|
||||
$mimeType = 'application/zip'
|
||||
$mimeType = 'application/zip';
|
||||
$zipFile->outputAsAttachment($outputFilename, $mimeType);
|
||||
```
|
||||
<a name="Documentation-ZipFile-outputAsResponse"></a> **ZipFile::outputAsResponse** - outputs a ZIP-archive as [PSR-7 Response](http://www.php-fig.org/psr/psr-7/).
|
||||
@@ -756,19 +766,9 @@ $zipFile->outputAsResponse($response, $outputFilename);
|
||||
```
|
||||
You can set the Mime-Type:
|
||||
```php
|
||||
$mimeType = 'application/zip'
|
||||
$mimeType = 'application/zip';
|
||||
$zipFile->outputAsResponse($response, $outputFilename, $mimeType);
|
||||
```
|
||||
An example for the Slim Framework:
|
||||
```php
|
||||
$app = new \Slim\App;
|
||||
$app->get('/download', function ($req, $res, $args) {
|
||||
$zipFile = new \PhpZip\ZipFile();
|
||||
$zipFile['file.txt'] = 'content';
|
||||
return $zipFile->outputAsResponse($res, 'file.zip');
|
||||
});
|
||||
$app->run();
|
||||
```
|
||||
<a name="Documentation-ZipFile-rewrite"></a> **ZipFile::rewrite** - save changes and re-open the changed archive.
|
||||
```php
|
||||
$zipFile->rewrite();
|
||||
@@ -785,10 +785,10 @@ composer install --dev
|
||||
```
|
||||
Run the tests:
|
||||
```bash
|
||||
vendor/bin/phpunit -v -c phpunit.xml
|
||||
vendor/bin/phpunit
|
||||
```
|
||||
### <a name="Changelog"></a> Changelog
|
||||
[Link to Changelog](CHANGELOG.md)
|
||||
Changes are documented in the [releases page](https://github.com/Ne-Lexa/php-zip/releases).
|
||||
|
||||
### <a name="Upgrade"></a> Upgrade
|
||||
#### <a name="Upgrade-v2-to-v3"></a> Upgrade version 2 to version 3.0
|
||||
|
Reference in New Issue
Block a user