$filePath: 壓縮包路徑 ../123.zip $path:要解壓的目錄 ../unzip/ public function newUnzip($filePath,$path) { $zip= new \ZipArchive(); if($zip->open($filePath) === true) { // 建立要解壓的目錄 // 獲取解壓的檔案陣列 $fileNum = $zip->numFiles; for ($i = 0; $i < $fileNum; $i++) { // 處理每一個檔案 $statInfo = $zip->statIndex($i, 64); // 獲取檔案的名稱的編碼格式 $info = explode('/', $statInfo['name']); foreach ($info as $key => $val) { $encoding = mb_detect_encoding($val, ['UTF-8', 'GBK', 'BIG5', 'CP936']); $info[$key] = iconv($encoding, 'UTF-8//IGNORE', $val); } $statInfo['name'] = implode('/', $info); mkdir($path, 0777, true); if (strpos($statInfo['name'], '/') !== false) { $mkdFile = explode('/', $statInfo['name']); if (count($mkdFile) == 1) { $namePath = $mkdFile[0]; } else { $namePath = $mkdFile[count($mkdFile) - 1]; } //獲取zip單個檔案資料 $fp = fopen('zip://' . $filePath . '#' . $zip->getNameIndex($i), 'rb'); $create = true; while (!feof($fp)) { //fread 獲取檔案資料流 儲存到本地 file_put_contents($path . DIRECTORY_SEPARATOR . $namePath, fread($fp, 9999999),$create ? 0 : FILE_APPEND); $create = false; } } else { if (!copy('zip://' . $filePath . '#' . $zip->getNameIndex($i), $path . '/' . $statInfo['name'])) { return false; } } } } $zip->close(); }