標籤:libz 解釋 資料量 自訂 支援 結構 -- 檔案夾 png
前言
近幾日,用爬蟲採集的了一些資料,存放到硬碟中,隨著資料量越來越多,所以想上傳到網盤當中,可是不加下密又覺得不放心,
所以開始用PHP的zip模組進行壓縮加密.
開始
$zipArc = new \ZipArchive();if ($zipArc->open('/home/test.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { //設定密碼 注意此處不是加密,僅僅是設定密碼 if (!$zipArc->setPassword('password')) { throw new RuntimeException('Set password failed'); } //往壓縮包內添加檔案 $zipArc->addFile('/home/test.png', '1/test.png'); //加密檔案 此處檔案名稱及路徑是壓縮包內的 if (!$zipArc->setEncryptionName('1/test.png', ZipArchive::EM_AES_256)) { throw new RuntimeException('Set encryption failed'); }}$zipArc->close();
注意事項
1 PHP7.2以下不支援加密
php7.2 以下是不支援加密的,我們看一下php官方文檔中的解釋
從PHP 7.2.0和libzip 1.2.0開始,密碼用於解壓縮歸檔,也是ZipArchive :: setEncryptionName() 和ZipArchive :: setEncryptionIndex()的預設密碼。
以前,此功能僅設定用於解壓縮存檔的密碼; 它沒有將非密碼保護的ZipArchive 變成受密碼保護的ZipArchive。
也就是說php7.2之前,setPassword(‘password‘)這個方法僅僅是設定setEncryptionName()和setEncryptionIndex()的預設密碼,卻沒有進行加密操作!!!,就問你坑不坑!!
2 方法找不到
提示沒有setEncryptionName和setEncryptionIndex方法時,請編譯時間zip模組時用以下參數
--with-libzip--enable-zip
3 目錄結構問題
待壓縮的檔案目錄,比說說是/home/test/a.png
壓縮後,你發現壓縮包內的目錄結構是/home/test/a.png,
也就是說壓縮包原封不動的保持了原來檔案的目錄.可是我們想自訂壓縮包目錄怎麼辦呢?
$a = '/home/test.png';$b = '1/test.png';//$a是待添加的檔案路徑 $b是壓縮包內的路徑$zipArc->addFile($a, $b);
參考資料
- php ziparchive壓縮檔夾時,Zip檔案目錄結構不對
- 官方文檔 ZipArchive class
php加密壓縮檔