您的位置:首页 > 编程语言 > PHP开发

PHP 解压zip文件的函数封装

2015-12-03 16:24 851 查看
/**
* 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文件的大小
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: