$filename = "./" . date ( 'YmdH' ) . ".zip"; // 最終生成的文件名(含路徑)
// 生成文件
$zip = new ZipArchive (); // 使用本類,linux需開啟zlib,windows需取消php_zip.dll前的注釋
if ($zip->open ($filename ,\ZipArchive::OVERWRITE) !== true) { //OVERWRITE 參數會覆寫壓縮包的文件 文件必須已經存在
if($zip->open ($filename ,\ZipArchive::CREATE) !== true){ // 文件不存在則生成一個新的文件 用CREATE打開文件會追加內容至zip
exit ( '無法打開文件,或者文件創建失敗' );
}
}
$fileName = "/www/attach/1..jpg"; //存放文件的真實路徑
if(file_exists($fileName )){
$zip->addEmptyDir("attach"); //生成空文件夾
$zip->addFile( $fileName , 'attach/'.basename($fileName));//第二個參數是放在壓縮包中的文件名稱,如果文件可能會有重復,就需要注意一下 寫上目錄就會存放至目錄
}
$zip->close (); // 關閉
//下面是輸出下載;
header ( "Cache-Control: max-age=0" );
header ( "Content-Description: File Transfer" );
header ( 'Content-disposition: attachment; filename=' . basename ( $filename ) ); // 文件名
header ( "Content-Type: application/zip" ); // zip格式的
header ( "Content-Transfer-Encoding: binary" ); // 告訴瀏覽器,這是二進制文件
header ( 'Content-Length: ' . filesize ( $filename ) ); // 告訴瀏覽器,文件大小
@readfile ( $filename );//輸出文件;
a) 我們只需要new一個ZipArchive對象,然后使用open方法創建一個zip文件,接着使用addFile方法,將要打包的文件寫入剛剛創建的zip文件中,最好還得記得關閉該對象。
b) 注意點:使用open方法的時候,第二個參數$flags是可選的,$flags用來指定對打開的zip文件的處理方式,共有四種情況
i. ZIPARCHIVE::OVERWRITE 總是創建一個新的文件,如果指定的zip文件存在,則會覆蓋掉
ii. ZIPARCHIVE::CREATE 如果指定的zip文件不存在,則新建一個
iii. ZIPARCHIVE::EXCL 如果指定的zip文件存在,則會報錯
iv. ZIPARCHIVE::CHECKCONS
