/** * zip文件解壓 * * @param $zipFilePath zip文件的路徑,能夠不加zip文件後綴.若是其餘類型的文件假裝成zip解壓也會失敗 * @param $directoryPath 解壓到的文件夾路徑 * @param null $fileExtensionArray 容許解壓的文件後綴名數組,默認爲null,解壓任何類型的文件 * * @return bool 解壓失敗返回false,成功返回true */ function unZipFile($zipFilePath, $directoryPath, $fileExtensionArray = null) { if (!file_exists($zipFilePath)) { return false; } if (!is_dir($directoryPath)) { // 解壓後是不容許執行的,可是任何人能夠讀寫,方便處理 if (!mkdir($directoryPath, 0666, true)) { return false; } } $resource = zip_open($zipFilePath); // 其餘類型的文件假裝成zip文件時出現此種狀況 if (is_numeric($resource)) { return false; } while ($dir_resource = zip_read($resource)) { if (!zip_entry_open($resource, $dir_resource)) { continue; } $file_name = $directoryPath . zip_entry_name($dir_resource); $file_path = substr($file_name, 0, strrpos($file_name, '/')); if (!is_dir($file_path)) { if (!mkdir($file_path, 0666, true)) { return false; } } if (is_dir($file_name)) { zip_entry_close($dir_resource); continue; } if (isset($fileExtensionArray) && count($fileExtensionArray) > 0) { if (!in_array(pathinfo($file_name, PATHINFO_EXTENSION), $fileExtensionArray)) { continue; } } $file_size = zip_entry_filesize($dir_resource); $file_content = zip_entry_read($dir_resource, $file_size); file_put_contents($file_name, $file_content); zip_entry_close($dir_resource); } zip_close($resource); return true; }
5.4 下測試經過,其餘的狀況能夠擴展此函數便可,如限制zip文件的大小數組