PhpZip
เป็นไลบรารี php สำหรับการใช้งานเพิ่มเติมกับไฟล์ ZIP
เอกสารของรัสเซีย
เวอร์ชัน | PHP | เอกสารประกอบ |
---|---|---|
^4.0 (มาสเตอร์) | ^7.4|^8.0 | ปัจจุบัน |
^3.0 | ^5.5|^7.0 | เอกสารเวอร์ชัน 3.3 |
PhpZipZipFile
php-zip
และคลาส ZipArchive
)php-bz2
ZIP64
(ขนาดไฟล์มากกว่า 4 GB หรือจำนวนรายการในไฟล์เก็บถาวรมากกว่า 65535)ความสนใจ!
สำหรับระบบ 32 บิต ปัจจุบันยังไม่รองรับวิธีการเข้ารหัส
Traditional PKWARE Encryption (ZipCrypto)
ใช้วิธีการเข้ารหัสWinZIP AES Encryption
ทุกครั้งที่เป็นไปได้
Traditional PKWARE Encryption (ZipCrypto)
และ WinZIP AES Encryption
PHP
>= 7.4 หรือ PHP
>= 8.0 (ควรเป็น 64 บิต)bzip2
สำหรับการบีบอัด BZIP2openssl
ส่วนขยาย php ที่เป็นทางเลือกสำหรับการสนับสนุน WinZip Aes Encryption
composer require nelexa/zip
เวอร์ชันเสถียรล่าสุด:
// create new archive
$ zipFile = new PhpZip ZipFile ();
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
-> saveAsFile ( $ outputFilename ) // save the archive to a file
-> close (); // close archive
// open archive, extract, add files, set password and output to browser.
$ zipFile
-> openFile ( $ outputFilename ) // open archive from file
-> extractTo ( $ outputDirExtract ) // extract files to the specified directory
-> deleteFromRegex ( ' ~^.~ ' ) // delete all hidden (Unix) files
-> addFromString ( ' dir/file.txt ' , ' Test file ' ) // add a new entry from the string
-> setPassword ( ' password ' ) // set password for all entries
-> outputAsAttachment ( ' library.jar ' ); // output to the browser without saving to a file
}
catch ( PhpZip Exception ZipException $ e ){
// handle exception
}
finally {
$ zipFile -> close ();
}
ตัวอย่างอื่นๆ สามารถพบได้ในโฟลเดอร์ tests/
รายการ Zip - ไฟล์หรือโฟลเดอร์ในไฟล์ ZIP แต่ละรายการในไฟล์เก็บถาวรมีคุณสมบัติบางอย่าง เช่น ชื่อไฟล์ วิธีการบีบอัด วิธีการเข้ารหัส ขนาดไฟล์ก่อนการบีบอัด ขนาดไฟล์หลังการบีบอัด CRC32 และอื่นๆ
PhpZipZipFile
SplFileInfo
ลงในไฟล์ ZIPSymfonyComponentFinderFinder
ไปยังไฟล์ ZIPเตรียมใช้งานไฟล์ ZIP
$ zipFile = new PhpZip ZipFile ();
เปิดไฟล์ zip จากไฟล์
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> openFile ( ' file.zip ' );
เปิดไฟล์ zip จากสตริง
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> openFromString ( $ stringContents );
เปิดไฟล์ zip จากสตรีม
$ stream = fopen ( ' file.zip ' , ' rb ' );
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> openFromStream ( $ stream );
ส่งกลับจำนวนรายการในไฟล์เก็บถาวร
$ zipFile = new PhpZip ZipFile ();
$ count = count ( $ zipFile );
// or
$ count = $ zipFile -> count ();
ส่งคืนรายการไฟล์เก็บถาวร
$ zipFile = new PhpZip ZipFile ();
$ listFiles = $ zipFile -> getListFiles ();
// example array contents:
// array (
// 0 => 'info.txt',
// 1 => 'path/to/file.jpg',
// 2 => 'another path/',
// 3 => '0',
// )
ส่งคืนเนื้อหารายการโดยใช้ชื่อ
// $entryName = 'path/to/example-entry-name.txt';
$ zipFile = new PhpZip ZipFile ();
$ contents = $ zipFile [ $ entryName ];
// or
$ contents = $ zipFile -> getEntryContents ( $ entryName );
ตรวจสอบว่ามีรายการในไฟล์เก็บถาวรหรือไม่
// $entryName = 'path/to/example-entry-name.txt';
$ zipFile = new PhpZip ZipFile ();
$ hasEntry = isset ( $ zipFile [ $ entryName ]);
// or
$ hasEntry = $ zipFile -> hasEntry ( $ entryName );
ตรวจสอบว่ารายการในไฟล์เก็บถาวรเป็นไดเร็กทอรี
// $entryName = 'path/to/';
$ zipFile = new PhpZip ZipFile ();
$ isDirectory = $ zipFile -> isDirectory ( $ entryName );
แยกเนื้อหาที่เก็บถาวร ไดเร็กทอรีจะต้องมีอยู่
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> extractTo ( $ directory );
แยกไฟล์บางไฟล์ไปยังไดเร็กทอรี ไดเร็กทอรีจะต้องมีอยู่
// $toDirectory = '/tmp';
$ extractOnlyFiles = [
' filename1 ' ,
' filename2 ' ,
' dir/dir/dir/ '
];
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> extractTo ( $ toDirectory , $ extractOnlyFiles );
ZipFile
เป็นตัววนซ้ำ สามารถวนซ้ำรายการทั้งหมดใน foreach
loop ได้
foreach ( $ zipFile as $ entryName => $ contents ){
echo " Filename: $ entryName " . PHP_EOL ;
echo " Contents: $ contents " . PHP_EOL ;
echo ' ----------------------------- ' . PHP_EOL ;
}
สามารถวนซ้ำผ่าน Iterator
ได้
$ iterator = new ArrayIterator ( $ zipFile );
while ( $ iterator -> valid ())
{
$ entryName = $ iterator -> key ();
$ contents = $ iterator -> current ();
echo " Filename: $ entryName " . PHP_EOL ;
echo " Contents: $ contents " . PHP_EOL ;
echo ' ----------------------------- ' . PHP_EOL ;
$ iterator -> next ();
}
ส่งคืนความคิดเห็นที่เก็บไฟล์ Zip
$ zipFile = new PhpZip ZipFile ();
$ commentArchive = $ zipFile -> getArchiveComment ();
ส่งคืนความคิดเห็นของรายการโดยใช้ชื่อรายการ
$ zipFile = new PhpZip ZipFile ();
$ commentEntry = $ zipFile -> getEntryComment ( $ entryName );
วิธีการเพิ่มรายการลงในไฟล์ ZIP ทั้งหมดช่วยให้คุณสามารถระบุวิธีการบีบอัดเนื้อหาได้
มีวิธีการบีบอัดดังต่อไปนี้:
PhpZipConstantsZipCompressionMethod::STORED
- ไม่มีการบีบอัดPhpZipConstantsZipCompressionMethod::DEFLATED
- ยุบการบีบอัดPhpZipConstantsZipCompressionMethod::BZIP2
- การบีบอัด Bzip2 พร้อมส่วนขยาย ext-bz2
เพิ่มไฟล์ลงในไฟล์ ZIP จากเส้นทางที่กำหนด
$ 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
เพิ่ม SplFileInfo
ไปยังไฟล์ ZIP
// $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 );
// set compression method
$ zipFile -> addSplFile ( $ splFile , $ entryName , $ options = [
PhpZip Constants ZipOptions:: COMPRESSION_METHOD => PhpZip Constants ZipCompressionMethod:: DEFLATED ,
]);
เพิ่มไฟล์จาก SymfonyComponentFinderFinder
ไปยังไฟล์ ZIP
$ finder = new Symfony Component Finder Finder ();
$ finder
-> files ()
-> name ( ' *.{jpg,jpeg,gif,png} ' )
-> name ( ' /^[0-9a-f]./ ' )
-> contains ( ' /lorems+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 ' )
]);
เพิ่มไฟล์ลงในไฟล์ ZIP โดยใช้เนื้อหา
$ zipFile = new PhpZip ZipFile ();
$ zipFile [ $ entryName ] = $ contents ;
// or
$ zipFile -> addFromString ( $ entryName , $ contents );
// you can specify a compression method
$ 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
เพิ่มรายการจากสตรีมไปยังไฟล์ ZIP
$ zipFile = new PhpZip ZipFile ();
// $stream = fopen(..., 'rb');
$ zipFile -> addFromStream ( $ stream , $ entryName );
// or
$ zipFile [ $ entryName ] = $ stream ;
// you can specify a compression method
$ 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
เพิ่มไดเรกทอรีใหม่
$ zipFile = new PhpZip ZipFile ();
// $path = "path/to/";
$ zipFile -> addEmptyDir ( $ path );
// or
$ 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 ' , ' 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 );
เพิ่มไฟล์ไปยังไฟล์เก็บถาวรจากไดเร็กทอรีบนพาธที่ระบุโดยไม่มีไดเร็กทอรีย่อย
$ 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/ ' ;
$ zipFile -> addDir ( $ dirName , $ localPath );
// you can specify a compression method
$ 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
เพิ่มไฟล์ไปยังไฟล์เก็บถาวรจากไดเร็กทอรีบนพาธที่ระบุพร้อมไดเร็กทอรีย่อย
$ 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/ ' ;
$ zipFile -> addDirRecursive ( $ dirName , $ localPath );
// you can specify a compression method
$ 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
เพิ่มไฟล์จากตัววนซ้ำของไดเร็กทอรี
// $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/ ' ;
$ zipFile -> addFilesFromIterator ( $ directoryIterator , $ localPath );
// or
$ zipFile [ $ localPath ] = $ directoryIterator ;
// you can specify a compression method
$ 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
ตัวอย่างไฟล์บางไฟล์ที่ไม่สนใจ:
$ ignoreFiles = [
' file_ignore.txt ' ,
' dir_ignore/sub dir ignore/ '
];
// $directoryIterator = new DirectoryIterator($dir); // without subdirectories
// $directoryIterator = new RecursiveDirectoryIterator($dir); // with subdirectories
// use PhpZipUtilIteratorIgnoreFilesFilterIterator for non-recursive search
$ zipFile = new PhpZip ZipFile ();
$ ignoreIterator = new PhpZip Util Iterator IgnoreFilesRecursiveFilterIterator (
$ directoryIterator ,
$ ignoreFiles
);
$ zipFile -> addFilesFromIterator ( $ ignoreIterator );
เพิ่มไฟล์จากไดเร็กทอรีตามรูปแบบ glob โดยไม่มีไดเร็กทอรีย่อย
$ 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/ ' ;
$ zipFile -> addFilesFromGlob ( $ dir , $ globPattern , $ localPath );
// you can specify a compression method
$ 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
เพิ่มไฟล์จากไดเร็กทอรีตามรูปแบบ glob พร้อมไดเร็กทอรีย่อย
$ 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/ ' ;
$ zipFile -> addFilesFromGlobRecursive ( $ dir , $ globPattern , $ localPath );
// you can specify a compression method
$ 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
เพิ่มไฟล์จากไดเร็กทอรีตามรูปแบบ PCRE โดยไม่มีไดเร็กทอรีย่อย
$ 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/ ' ;
$ zipFile -> addFilesFromRegex ( $ dir , $ regexPattern , $ localPath );
// you can specify a compression method
$ 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
เพิ่มไฟล์จากไดเร็กทอรีตามรูปแบบ PCRE พร้อมไดเร็กทอรีย่อย
$ 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/ ' ;
$ zipFile -> addFilesFromRegexRecursive ( $ dir , $ regexPattern , $ localPath );
// you can specify a compression method
$ 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
ลบรายการในไฟล์เก็บถาวรโดยใช้ชื่อ
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> deleteFromName ( $ entryName );
ลบรายการในไฟล์เก็บถาวรโดยใช้รูปแบบ glob
$ globPattern = ' **.{jpg,jpeg,png,gif} ' ; // example glob pattern -> delete all .jpg, .jpeg, .png and .gif files
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> deleteFromGlob ( $ globPattern );
ลบรายการในไฟล์เก็บถาวรโดยใช้รูปแบบ PCRE
$ regexPattern = ' /.(jpe?g|png|gif)$/si ' ; // example regex pattern -> delete all .jpg, .jpeg, .png and .gif files
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> deleteFromRegex ( $ regexPattern );
ลบรายการทั้งหมดในไฟล์ ZIP
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> deleteAll ();
เปลี่ยนชื่อรายการที่กำหนดโดยชื่อ
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> rename ( $ oldName , $ newName );
ตั้งค่าระดับการบีบอัดสำหรับไฟล์ทั้งหมดในไฟล์เก็บถาวร
โปรดทราบว่าวิธีนี้ใช้ไม่ได้กับรายการที่เพิ่มเข้ามาหลังจากเรียกใช้วิธีนี้
ตามค่าเริ่มต้น ระดับการบีบอัดคือ 5 ( PhpZipConstantsZipCompressionLevel::NORMAL
) หรือระดับการบีบอัดที่ระบุในไฟล์เก็บถาวรสำหรับการบีบอัดแบบ Deflate
รองรับค่าตั้งแต่ 1 ( PhpZipConstantsZipCompressionLevel::SUPER_FAST
) ถึง 9 ( PhpZipConstantsZipCompressionLevel::MAXIMUM
) ยิ่งตัวเลขสูง การบีบอัดก็จะยิ่งดีและนานขึ้น
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> setCompressionLevel ( PhpZip Constants ZipCompressionLevel:: MAXIMUM );
ตั้งค่าระดับการบีบอัดสำหรับรายการตามชื่อ
รองรับค่าตั้งแต่ 1 ( PhpZipConstantsZipCompressionLevel::SUPER_FAST
) ถึง 9 ( PhpZipConstantsZipCompressionLevel::MAXIMUM
) ยิ่งตัวเลขสูง การบีบอัดก็จะยิ่งดีและนานขึ้น
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> setCompressionLevelEntry ( $ entryName , PhpZip Constants ZipCompressionLevel:: FAST );
ตั้งค่าวิธีการบีบอัดสำหรับรายการตามชื่อ
มีวิธีการบีบอัดดังต่อไปนี้:
PhpZipConstantsZipCompressionMethod::STORED
- ไม่มีการบีบอัดPhpZipConstantsZipCompressionMethod::DEFLATED
- ยุบการบีบอัดPhpZipConstantsZipCompressionMethod::BZIP2
- การบีบอัด Bzip2 พร้อมส่วนขยาย ext-bz2
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> setCompressionMethodEntry ( $ entryName , PhpZip Constants ZipCompressionMethod:: DEFLATED );
ตั้งค่าความคิดเห็นของไฟล์ ZIP
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> setArchiveComment ( $ commentArchive );
ตั้งค่าความคิดเห็นของรายการที่กำหนดโดยชื่อ
$ zipFile = new PhpZip ZipFile ();
$ zipFile -> setEntryComment ( $ entryName , $ comment );
การเลือกรายการในไฟล์เก็บถาวรเพื่อดำเนินการกับรายการเหล่านั้น
$ zipFile = new PhpZip ZipFile ();
$ matcher = $ zipFile -> matcher ();
การเลือกไฟล์จากไฟล์เก็บถาวรทีละไฟล์:
$ matcher
-> add ( ' entry name ' )
-> add ( ' another entry ' );
เลือกหลายไฟล์ในไฟล์เก็บถาวร:
$ matcher -> add ([
' entry name ' ,
' another entry name ' ,
' path/ '
]);
การเลือกไฟล์ตามนิพจน์ทั่วไป:
$ matcher -> match ( ' ~.jpe?g$~i ' );
เลือกไฟล์ทั้งหมดในไฟล์เก็บถาวร:
$ matcher -> all ();
count() - รับจำนวนรายการที่เลือก:
$ count = count ( $ matcher );
// or
$ count = $ matcher -> count ();
getMatches() - ส่งคืนรายการของรายการที่เลือก:
$ entries = $ matcher -> getMatches ();
// example array contents: ['entry name', 'another entry name'];
เรียกใช้ () - เรียกใช้ฟังก์ชันที่เรียกใช้ได้กับรายการที่เลือก:
// example
$ matcher -> invoke ( static function ( $ entryName ) use ( $ zipFile ) {
$ newName = preg_replace ( ' ~.(jpe?g)$~i ' , ' .no_optimize.$1 ' , $ entryName );
$ zipFile -> rename ( $ entryName , $ newName );
});
ฟังก์ชั่นการทำงานกับรายการที่เลือก:
$ matcher -> delete (); // remove selected entries from a ZIP archive
$ matcher -> setPassword ( $ password ); // sets a new password for the selected entries
$ matcher -> setPassword ( $ password , $ encryptionMethod ); // sets a new password and encryption method to selected entries
$ matcher -> setEncryptionMethod ( $ encryptionMethod ); // sets the encryption method to the selected entries
$ matcher -> disableEncryption (); // disables encryption for selected entries
ดำเนินการสนับสนุนวิธีการเข้ารหัส:
PhpZipConstantsZipEncryptionMethod::PKWARE
- การเข้ารหัส PKWARE แบบดั้งเดิม (ดั้งเดิม)PhpZipConstantsZipEncryptionMethod::WINZIP_AES_256
- การเข้ารหัส WinZip AES 256 บิต (แนะนำ)PhpZipConstantsZipEncryptionMethod::WINZIP_AES_192
- การเข้ารหัส WinZip AES 192 บิตPhpZipConstantsZipEncryptionMethod::WINZIP_AES_128
- การเข้ารหัส WinZip AES 128 บิต ตั้งรหัสผ่านสำหรับการเปิดไฟล์เก็บถาวร
การตั้งรหัสผ่านไม่จำเป็นสำหรับการเพิ่มรายการใหม่หรือการลบรายการที่มีอยู่ แต่ถ้าคุณต้องการแยกเนื้อหาหรือเปลี่ยนวิธีการ / ระดับการบีบอัด วิธีการเข้ารหัส หรือเปลี่ยนรหัสผ่าน ในกรณีนี้ จะต้องระบุรหัสผ่าน
$ zipFile -> setReadPassword ( $ password );
รับรหัสผ่านสำหรับการอ่านรายการที่กำหนดโดยชื่อ
$ zipFile -> setReadPasswordEntry ( $ entryName , $ password );
ตั้งรหัสผ่านใหม่สำหรับไฟล์ทั้งหมดในไฟล์เก็บถาวร
โปรดทราบว่าวิธีนี้ใช้ไม่ได้กับรายการที่เพิ่มเข้ามาหลังจากเรียกใช้วิธีนี้
$ zipFile -> setPassword ( $ password );
คุณสามารถตั้งค่าวิธีการเข้ารหัส:
$ encryptionMethod = PhpZip Constants ZipEncryptionMethod:: WINZIP_AES_256 ;
$ zipFile -> setPassword ( $ password , $ encryptionMethod );
ตั้งรหัสผ่านใหม่ของรายการที่กำหนดโดยชื่อ
$ zipFile -> setPasswordEntry ( $ entryName , $ password );
คุณสามารถตั้งค่าวิธีการเข้ารหัส:
$ encryptionMethod = PhpZip Constants ZipEncryptionMethod:: WINZIP_AES_256 ;
$ zipFile -> setPasswordEntry ( $ entryName , $ password , $ encryptionMethod );
ปิดใช้งานการเข้ารหัสสำหรับรายการทั้งหมดที่มีอยู่ในไฟล์เก็บถาวรแล้ว
โปรดทราบว่าวิธีนี้ใช้ไม่ได้กับรายการที่เพิ่มเข้ามาหลังจากเรียกใช้วิธีนี้
$ zipFile -> disableEncryption ();
ปิดใช้งานการเข้ารหัสของรายการที่กำหนดโดยชื่อ
$ zipFile -> disableEncryptionEntry ( $ entryName );
เลิกทำการเปลี่ยนแปลงทั้งหมดที่ทำในไฟล์เก็บถาวร
$ zipFile -> unchangeAll ();
เลิกทำการเปลี่ยนแปลงความคิดเห็นที่เก็บถาวร
$ zipFile -> unchangeArchiveComment ();
เลิกทำการเปลี่ยนแปลงรายการที่กำหนดโดยชื่อ
$ zipFile -> unchangeEntry ( $ entryName );
บันทึกไฟล์เก็บถาวรลงในไฟล์
$ zipFile -> saveAsFile ( $ filename );
เขียนไฟล์เก็บถาวรไปยังสตรีม
// $fp = fopen($filename, 'w+b');
$ zipFile -> saveAsStream ( $ fp );
ส่งออกไฟล์ ZIP เป็นสตริง
$ rawZipArchiveBytes = $ zipFile -> outputAsString ();
ส่งออกไฟล์ ZIP ไปยังเบราว์เซอร์
$ zipFile -> outputAsAttachment ( $ outputFilename );
คุณสามารถตั้งค่า Mime-Type:
$ mimeType = ' application/zip ' ;
$ zipFile -> outputAsAttachment ( $ outputFilename , $ mimeType );
ส่งออกไฟล์ ZIP เป็นการตอบกลับ PSR-7
วิธีการส่งออกสามารถใช้ได้ในเฟรมเวิร์กที่เข้ากันได้กับ PSR-7
// $response = ....; // instance PsrHttpMessageResponseInterface
$ zipFile -> outputAsPsr7Response ( $ response , $ outputFilename );
คุณสามารถตั้งค่า Mime-Type:
$ mimeType = ' application/zip ' ;
$ zipFile -> outputAsPsr7Response ( $ response , $ outputFilename , $ mimeType );
ส่งออกไฟล์ ZIP เป็น Symfony Response
วิธีการส่งออกสามารถใช้ในกรอบงาน Symfony
$ response = $ zipFile -> outputAsSymfonyResponse ( $ outputFilename );
คุณสามารถตั้งค่า Mime-Type:
$ mimeType = ' application/zip ' ;
$ response = $ zipFile -> outputAsSymfonyResponse ( $ outputFilename , $ mimeType );
ตัวอย่างการใช้งานใน Symfony Controller:
<?php
namespace App Controller ;
use PhpZip ZipFile ;
use Symfony Component HttpFoundation Response ;
use Symfony Component Routing Annotation Route ;
class DownloadZipController
{
/**
* @Route("/downloads/{id}")
*
* @throws PhpZipExceptionZipException
*/
public function __invoke ( string $ id ): Response
{
$ zipFile = new ZipFile ();
$ zipFile [ ' file ' ] = ' contents ' ;
$ outputFilename = $ id . ' .zip ' ;
return $ zipFile -> outputAsSymfonyResponse ( $ outputFilename );
}
}
บันทึกการเปลี่ยนแปลงและเปิดไฟล์เก็บถาวรที่เปลี่ยนแปลงอีกครั้ง
$ zipFile -> rewrite ();
ปิดไฟล์เก็บถาวร
$ zipFile -> close ();
ติดตั้งการพึ่งพาสำหรับการพัฒนา:
composer install --dev
ทำการทดสอบ:
vendor/bin/phpunit
การเปลี่ยนแปลงได้รับการบันทึกไว้ในหน้าการเผยแพร่
อัปเดตเวอร์ชันหลักในไฟล์ composer.json
เป็น ^4.0
{
"require" : {
"nelexa/zip" : " ^4.0 "
}
}
จากนั้นติดตั้งการอัปเดตโดยใช้ Composer
:
composer update nelexa/zip
อัปเดตโค้ดของคุณให้ทำงานกับเวอร์ชันใหม่: BC
zipalign
ออกแล้ว ฟังก์ชันนี้จะถูกวางไว้ในแพ็คเกจแยกต่างหาก nelexa/apkfile
อัปเดตเวอร์ชันหลักในไฟล์ composer.json
เป็น ^3.0
{
"require" : {
"nelexa/zip" : " ^3.0 "
}
}
จากนั้นติดตั้งการอัปเดตโดยใช้ Composer
:
composer update nelexa/zip
อัปเดตโค้ดของคุณให้ทำงานกับเวอร์ชันใหม่:
ZipOutputFile
รวมเข้ากับ ZipFile
และถูกลบออกnew PhpZipZipOutputFile()
เป็น new PhpZipZipFile()
PhpZipZipFile::openFromFile($filename);
ถึง (new PhpZipZipFile())->openFile($filename);
PhpZipZipOutputFile::openFromFile($filename);
ถึง (new PhpZipZipFile())->openFile($filename);
PhpZipZipFile::openFromString($contents);
ถึง (new PhpZipZipFile())->openFromString($contents);
PhpZipZipFile::openFromStream($stream);
ถึง (new PhpZipZipFile())->openFromStream($stream);
PhpZipZipOutputFile::create()
เป็น new PhpZipZipFile()
PhpZipZipOutputFile::openFromZipFile(PhpZipZipFile $zipFile)
> (new PhpZipZipFile())->openFile($filename);
addFromFile
เพื่อ addFile
setLevel
เพื่อ setCompressionLevel
ZipFile::setPassword
เป็น ZipFile::withReadPassword
ZipOutputFile::setPassword
เป็น ZipFile::withNewPassword
ZipOutputFile::disableEncryptionAllEntries
เป็น ZipFile::withoutPassword
ZipOutputFile::setComment
เป็น ZipFile::setArchiveComment
ZipFile::getComment
ไปยัง ZipFile::getArchiveComment
addDir
, addFilesFromGlob
, addFilesFromRegex
getLevel
setCompressionMethod
setEntryPassword