欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP实现zip压缩解压通用函数

程序员文章站 2022-06-11 18:29:23
...
  1. function ezip($zip, $hedef = ''){
  2. $dirname=preg_replace('/.zip/', '', $zip);
  3. $root = $_SERVER['DOCUMENT_ROOT'].'/zip/';
  4. // echo $root. $zip;
  5. $zip = zip_open($root . $zip);
  6. // var_dump($zip);
  7. @mkdir($root . $hedef . $dirname.'/'.$zip_dosya);
  8. while($zip_icerik = zip_read($zip)){
  9. $zip_dosya = zip_entry_name($zip_icerik);
  10. if(strpos($zip_dosya, '.')){
  11. $hedef_yol = $root . $hedef . $dirname.'/'.$zip_dosya;
  12. @touch($hedef_yol);
  13. // echo $hedef_yol;
  14. $yeni_dosya = @fopen($hedef_yol, 'w+');
  15. @fwrite($yeni_dosya, zip_entry_read($zip_icerik));
  16. @fclose($yeni_dosya);
  17. // $yeni_dosya;
  18. }else{
  19. @mkdir($root . $hedef . $dirname.'/'.$zip_dosya);
  20. // echo $root . $hedef . 'x/'.$zip_dosya;
  21. };
  22. };
  23. }
  24. // ezip('yuol.zip','./tr/');
  25. function zip($path) {
  26. $path=preg_replace('/\/$/', '', $path);
  27. preg_match('/\/([\d\D][^\/]*)$/', $path, $matches, PREG_OFFSET_CAPTURE);
  28. $filename=$matches[1][0].".zip";
  29. // var_dump($filename);
  30. // set_time_limit(0);
  31. $zip = new ZipArchive();
  32. $zip->open($filename,ZIPARCHIVE::OVERWRITE);//return ;
  33. // var_dump($path);
  34. if (is_file($path)) {
  35. $path=preg_replace('/\/\//', '/', $path);
  36. $base_dir=preg_replace('/\/[\d\D][^\/]*$/', '/', $path);
  37. $base_dir=addcslashes($base_dir, '/:');
  38. $localname=preg_replace('/'.$base_dir.'/', '', $path);
  39. // var_dump($localname);
  40. $zip->addFile($path,$localname);
  41. // var_dump($path);
  42. $zip->close();
  43. return;
  44. }elseif (is_dir($path)) {
  45. $path=preg_replace('/\/[\d\D][^\/]*$/', '', $path);
  46. $base_dir=$path.'/';//基目录
  47. $base_dir=addcslashes($base_dir, '/:');
  48. // var_dump($base_dir);
  49. }
  50. $path=preg_replace('/\/\//', '/', $path);
  51. // var_dump($path);
  52. function addItem($path,&$zip,&$base_dir){
  53. // var_dump($path);
  54. $handle = opendir($path);
  55. // var_dump($path);
  56. while (false !== ($file = readdir($handle))) {
  57. if (($file!='.')&&($file!='..')){
  58. // var_dump($file);
  59. $ipath=$path.'/'.$file;
  60. if (is_file($ipath)){//条目是文件
  61. $localname=preg_replace('/'.$base_dir.'/', '', $ipath);
  62. var_dump($localname);
  63. $zip->addFile($ipath,$localname);
  64. // var_dump($r);
  65. } else if (is_dir($ipath)){
  66. addItem($ipath,$zip,$base_dir);
  67. $localname=preg_replace('/'.$base_dir.'/', '', $ipath);
  68. var_dump($localname);
  69. $zip->addEmptyDir($localname);
  70. }
  71. // var_dump($path);
  72. }
  73. }
  74. }
  75. // var_dump($base_dir);
  76. addItem($path,$zip,$base_dir);
  77. $zip->close();
  78. }
  79. //调用方法
  80. zip('解压的目录');
复制代码

压缩解压, PHP, zip