php解压rar压缩文件详解

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