php解压rar压缩文件详解

1970-01-01 08:00:00 php

请确保已经安装了php rar扩展,如果没有安装的请查看centos linux安装php rar扩展

使用方式

  1. un_rar("/home/wwwroot/notetribe.com/public/upload/20240403180644127.rar")`

解压成功后返回解压后的文件信息

php解压rar压缩文件详解

  1. /**
  2. * 使用php rar扩展解压rar文件
  3. * Created by PhpStorm.
  4. * User: aliqi
  5. * Date: 2024/4/3
  6. * @param string $rarFile rar文件路径
  7. * @param string $toDir 解压到的目录
  8. * @param int $returnFileNum 返回文件数量
  9. * @return array|string
  10. */
  11. function un_rar($rarFile,$toDir='',$returnFileNum=''){
  12. //判断是否是rar文件
  13. if(pathinfo($rarFile,PATHINFO_EXTENSION) != 'rar'){
  14. return 'not rar file';
  15. }
  16. //判断rar文件是否存在
  17. if(!file_exists($rarFile)){
  18. return 'rar file not exists';
  19. }
  20. //判断解压目录是否存在,不存在则创建
  21. if(!$toDir){
  22. $toDir = dirname($rarFile);
  23. }
  24. $toDir = str_replace('//','/',$toDir).'/unzip/'.$_SESSION['userinfo']['username'];
  25. if(!is_dir($toDir)){
  26. mkdir($toDir,0755,true);
  27. }
  28. try{
  29. //打开rar文件
  30. $rar = RarArchive::open($rarFile);
  31. //获取rar文件中的文件列表
  32. $entries = $rar->getEntries();
  33. //存放解压后的文件信息
  34. $fileArr = [];
  35. //遍历文件列表
  36. foreach ($entries as $entry){
  37. //解压文件
  38. $entry->extract($toDir);
  39. //存放文件信息
  40. $fileArr[] = [
  41. 'name' => $entry->getName(),
  42. 'size' => $entry->getUnpackedSize(),
  43. 'file' => $toDir.DIRECTORY_SEPARATOR.$entry->getName()
  44. ];
  45. //判断是否返回指定数量的文件
  46. if($returnFileNum && count($fileArr) >= $returnFileNum){
  47. break;
  48. }
  49. }
  50. //关闭rar文件
  51. $rar->close();
  52. //返回解压后的文件信息
  53. return $fileArr;
  54. }catch (Exception $e){
  55. return $e->getMessage();
  56. }
  57. }