1. 程式人生 > >php加密壓縮文件

php加密壓縮文件

php href 資料 官方文檔 pass () exc throw php7

前言

近幾日,用爬蟲采集的了一些數據,存放到硬盤中,隨著數據量越來越多,所以想上傳到網盤當中,可是不加下密又覺得不放心,
所以開始用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加密壓縮文件