php解压rar压缩文件详解
2024-04-03 18:03:42
php
请确保已经安装了php rar扩展,如果没有安装的请查看centos linux安装php rar扩展
使用方式
un_rar("/home/wwwroot/notetribe.com/public/upload/20240403180644127.rar")`
解压成功后返回解压后的文件信息
/**
* 使用php rar扩展解压rar文件
* @param string $rarFile rar文件路径
* @param string $toDir 解压到的目录
* @param int $returnFileNum 返回文件数量
* @return array|string
*/
function un_rar($rarFile,$toDir='',$returnFileNum=''){
//判断是否是rar文件
if(pathinfo($rarFile,PATHINFO_EXTENSION) != 'rar'){
return 'not rar file';
}
//判断rar文件是否存在
if(!file_exists($rarFile)){
return 'rar file not exists';
}
//判断解压目录是否存在,不存在则创建
if(!$toDir){
$toDir = dirname($rarFile);
}
$toDir = str_replace('//','/',$toDir).'/unzip/'.$_SESSION['userinfo']['username'];
if(!is_dir($toDir)){
mkdir($toDir,0755,true);
}
try{
//打开rar文件
$rar = RarArchive::open($rarFile);
//获取rar文件中的文件列表
$entries = $rar->getEntries();
//存放解压后的文件信息
$fileArr = [];
//遍历文件列表
foreach ($entries as $entry){
//解压文件
$entry->extract($toDir);
//存放文件信息
$fileArr[] = [
'name' => $entry->getName(),
'size' => $entry->getUnpackedSize(),
'file' => $toDir.DIRECTORY_SEPARATOR.$entry->getName()
];
//判断是否返回指定数量的文件
if($returnFileNum && count($fileArr) >= $returnFileNum){
break;
}
}
//关闭rar文件
$rar->close();
//返回解压后的文件信息
return $fileArr;
}catch (Exception $e){
return $e->getMessage();
}
}