ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Thinkphp6---开发ZipArchive打包下载文件

2022-05-04 01:00:25  阅读:523  来源: 互联网

标签:Content zipName ZipArchive zip Thinkphp6 --- header PHP 打包


最近需要开发一个使用Thinkphp6实现打包下载文件的功能,具体开发流程如下:

windows环境:

1、下载拓展

https://windows.php.net/downloads/pecl/releases/zip/

找到合适自己PHP版本和系统的ZIP,推荐选择:1.13.5

然后选择合适自己PHP版本的压缩包,我的PHP是7.1的,所以选择:php_zip-1.13.5-7.1-ts-vc14-x86.zip

2、解压拓展

解压文件后,把php_zip.dll文件放到PHP的扩展文件夹里

这里的PHP的拓展文件夹就是:PHP目录下的ext目录:

F:\upupw\PHP7\ext

然后打开 php.ini 添加拓展:extension=php_zip.dll

可以直接搜索:extension 在拓展下面添加即可:

保存后,重启apache:

通过 phpinfo(); 查看是否启动该拓展:

linux环境参考:

https://www.jianshu.com/p/7d032dc34219

具体代码示例:

/**
 * [index 打包下载]
 * https://www.csdn.net/tags/MtTaMgzsMDQ3MDE3LWJsb2cO0O0O.html
 * https://blog.csdn.net/qq_38398347/article/details/118222905
 */
public function index()
{
  // $rootPath = app()->getRootPath(); // 根目录 \tp6.fyz.com\
  $rootPath = $_SERVER['DOCUMENT_ROOT'];// 网站根目录 /tp6.fyz.com/public
  $pathArr = [
    "/uploads/idcard-back.jpg",
    "/uploads/idcard-combine.jpg"
  ];
  foreach($pathArr as &$item) $item = $rootPath . $item;
  $zipName = "zip/image.zip";
  $result = $this->makeZip($pathArr,$zipName);
  // 验证文件是否存在
  if (!file_exists($result['path'])) {
      exit("文件不存在");
  }
  $isDown = true;
  // 下载
  if ($isDown) {
      // ob_clean();
      // 下载压缩包
      header("Cache-Control: public");
      header("Content-Description: File Transfer");
      header('Content-disposition: attachment; filename=' . basename($zipName)); //文件名
      header("Content-Type: application/zip"); //zip格式的
      header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
      header('Content-Length: ' . filesize($zipName)); //告诉浏览器,文件大小
      @readfile($zipName);//ob_end_clean();
      // @unlink(app()->getRootPath().'public/'.$zipName);// 删除压缩包
  } else {
      // 直接返回压缩包地址
      return $zipName;
  }
}

通过该方法可以完成对文件的打包和下载,但是新问题是打包的目录结构层级太深:

 

可以看到这样打包将会把这个文件的所有目录给进行打包压缩。 

标签:Content,zipName,ZipArchive,zip,Thinkphp6,---,header,PHP,打包
来源: https://www.cnblogs.com/e0yu/p/16220026.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有