PclZip替代ZipArchive,解决PHP报错问题!

时间:2023年10月04日

/

来源:网络

/

编辑:佚名

PclZip是一个基于PHP的ZIP归档库,可以轻松地创建、读取和提取ZIP文件。与ZipArchive类不同,PclZip不需要PHP的Zip扩展程序。
折腾一下午,结果还是选择抛弃掉ZipArchive,真是佛了!
原来的需求是:
《PHP远程下载zip并解压覆盖指定目录,如果指定目录不存在,那么便创建目录,如果目录存在则清空目录,解压的zip文件中,含有中文名的文件》
由于PclZip官方已经跑路了,可能跑路了吧,我去找的时候,反正已经没了,所以这里准备了一个找到的PclZip包,留着备用一下,其实也就是一个PHP文件!
将里面的函数替换为以下,即可:
function downloadAndExtractZip($remoteZipUrl, $localDir) {
  // 如果本地目录不存在,创建目录
  if (!file_exists($localDir)) {
    mkdir($localDir, 0777, true);
  }
  // 如果本地目录存在,清空目录
  if (file_exists($localDir) && is_dir($localDir)) {
    $files = glob($localDir . '/*'); // 获取目录下的所有文件
    foreach ($files as $file) {
      if (is_file($file)) {
        unlink($file); // 删除文件
      }
    }
  }
  // 下载zip文件到本地临时文件
  $tempFile = tempnam(sys_get_temp_dir(), 'zip');
  $fp = fopen($tempFile, 'w');
  $ch = curl_init($remoteZipUrl);
  curl_setopt($ch, CURLOPT_FILE, $fp);
  curl_exec($ch);
  curl_close($ch);
  fclose($fp);
  // 解压zip文件到本地目录
  $zip = new PclZip($tempFile);
  $extractedFiles = $zip->extract(PCLZIP_OPT_PATH, $localDir, PCLZIP_OPT_SET_CHMOD, 0777);
  if ($extractedFiles != 0) {
    unlink($tempFile); // 删除本地临时文件
    return true;
  } else {
    unlink($tempFile); // 删除本地临时文件
    return false;
  }
}
pclzip-master.zip下
载地址:
链接: https://pan.baidu.com/s/1f-P48VzwwNNilKASgJZjtg 提取码: vu5d
https://pan.baidu.com/s/1lc-GQOtC37eMlcNNlc2aPg?pwd=rc4i  提取码:rc4i
猜你需要

豫ICP备2021026617号-1  豫公网安备:41172602000185   Copyright © 2021-2028 www.78moban.com/ All Rights Reserved

本站作品均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如有侵犯您的版权,请联系 1565229909#qq.com(把#改成@),我们将立即处理。