PclZip是一個基於PHP的ZIP歸檔庫,可以輕鬆地創建、讀取和提取ZIP文件。與ZipArchive類不同,PclZip不需要PHP的Zip擴展程序。
折騰一下午,結果還是選擇拋棄掉ZipArchive,真是佛了!
原來的需求是:
《
PHP遠程下載zip並解壓覆蓋指定目錄,如果指定目錄不存在,那麼便創建目錄,如果目錄存在則清空目錄,解壓的zip文件中,含有中文名的文件》
由於PclZip官方已經跑路了,可能跑路了吧,我去找的時候,反正已經沒了,所以這裏準備了一個找到的PclZip包,留着備用一下,其實也就是一個PHP文件!
將裏面的函數替換爲以下,即可:
🔒 隱藏內容:登錄後可查看
function downloadAndExtractZip($remoteZipUrl, $localDir) {
// 如果本地目錄不存在,創建目錄
if (!file_exists($localDir)) {
mkdir($localDir, 0777, true);
}
// 如果本地目錄存在,清空目錄
if (file_exists($localDir) && is_dir($localDir)) {
$files = glob($localDir . '/*'); // 獲取目錄下的所有文件
foreach ($files as $file) {
if (is_file($file)) {
unlink($file); // 刪除文件
}
}
}
// 下載zip文件到本地臨時文件
$tempFile = tempnam(sys_get_temp_dir(), 'zip');
$fp = fopen($tempFile, 'w');
$ch = curl_init($remoteZipUrl);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
curl_close($ch);
fclose($fp);
// 解壓zip文件到本地目錄
$zip = new PclZip($tempFile);
$extractedFiles = $zip->extract(PCLZIP_OPT_PATH, $localDir, PCLZIP_OPT_SET_CHMOD, 0777);
if ($extractedFiles != 0) {
unlink($tempFile); // 刪除本地臨時文件
return true;
} else {
unlink($tempFile); // 刪除本地臨時文件
return false;
}
}