问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

thinkphp怎样下载远程服务器上的文件

发布网友 发布时间:2022-04-06 04:12

我来回答

2个回答

懂视网 时间:2022-04-06 08:33

下面由thinkphp框架教程栏目给大家介绍Thinkphp6利用ZipArchive打包下载文件的方法,希望对需要的朋友有所帮助!

  • 基础环境
  • 系统环境:Windows10 x64
  • PHP集成环境:phpstudy
  • PHP依赖管理工具:Composer
  • 手册:Thinkphp
  • (一) 下载tp6框架

    composer create-project topthink/think tp6

    (二)打包下载类

    <?php
     namespace Jrk;
    
     class Zipdown
     {
     /**
     * 打包压缩文件及文件夹
     *
     * @Author Hhy <jackhhy520@qq.com>
     * @DateTime 2020-07-10 13:20:06
     * @param array $files
     * @param string $zipName 压缩包名称
     * @param boolean $wen 
     * @param boolean $isDown
     * @return void
     */ 
     public function zip_file($files = [], $zipName = '', $wen = true,$isDown = true){
    
     $zip_file_path='zip/';
     // 文件名为空则生成文件名
     if (empty($zipName)) {
      $zipName = $zip_file_path.date('YmdHis') . '.zip';
     }else{
      $zipName=$zip_file_path.$zipName.'.zip';
     }
    
     // 实例化类,使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
     $zip = new ipArchive;
     /*
     * 通过ZipArchive的对象处理zip文件
     * $zip->open这个方法如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE
     * $zip->open这个方法第一个参数表示处理的zip文件名。
     * 这里重点说下第二个参数,它表示处理模式
     * ZipArchive::OVERWRITE 总是以一个新的压缩包开始,此模式下如果已经存在则会被覆盖。
     * ZipArchive::OVERWRITE 不会新建,只有当前存在这个压缩包的时候,它才有效
     * */
     if ($zip->open($zipName, IPARCHIVE::OVERWRITE | IPARCHIVE::CREATE) !== true) {
      exit('无法打开文件,或者文件创建失败');
     }
    
      // 文件夹打包处理
      if (is_string($files)) {
      // 文件夹整体打包
      $this->addFileToZip($files, $zip);
      } else {
       // 文件打包
      foreach ($files as $val) {
       if(file_exists(app()->getRootPath().'public'.$val['att_dir'])){
       if($wen){
        //根据存储的文件夹打包分层
        $zip->addFile(app()->getRootPath().'public'.$val['att_dir'], iconv('UTF-8','gbk',$val['img_dir'].'/'.$val['name']));
       }else{
        //不分层
        $zip->addFile(app()->getRootPath().'public'.$val['att_dir'], iconv('UTF-8','gbk',$val['name']));
       }
       }
      }
      }
      // 关闭
      $zip->close();
    
      // 验证文件是否存在
      if (!file_exists($zipName)) {
      exit("文件不存在");
      }
    
     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;
      }
     }
    
     /**
     * 添加文件至压缩包
     * @Author Hhy <jackhhy520@qq.com>
     * @DateTime 2020-07-10 13:20:26
     * @param [type] $path
     * @param [type] $zip
     * @return void
     */ 
     public function addFileToZip($path, $zip)
     {
      // 打开文件夹
      $handler = opendir($path);
      while (($filename = readdir($handler)) !== false) {
      if ($filename != "." && $filename != "..") {
       // 编码转换
       $filename = iconv('gb2312', 'utf-8', $filename);
       // 文件夹文件名字为'.'和‘..’,不要对他们进行操作
       if (is_dir($path . "/" . $filename)) {
       // 如果读取的某个对象是文件夹,则递归
       $this->addFileToZip($path . "/" . $filename, $zip);
       } else {
       // 将文件加入zip对象
       $file_path = $path . "/" . $filename;
       $zip->addFile($file_path, basename($file_path));
       }
      }
      }
      // 关闭文件夹
      @closedir($path);
     }
    
     /**
     * 压缩文件解压
     *
     * @Author Hhy <jackhhy520@qq.com>
     * @DateTime 2020-07-10 13:23:11
     * @param [type] $file
     * @param [type] $dirname
     * @return void
     */
     public function unzip_file($file, $dirname)
     {
      if (!file_exists($file)) {
      return false;
      }
      // zip实例化对象
      $zipArc = new ipArchive();
      // 打开文件
      if (!$zipArc->open($file)) {
      return false;
      }
      // 解压文件
      if (!$zipArc->extractTo($dirname)) {
      // 关闭
      $zipArc->close();
      return false;
      }
      return $zipArc->close();
     }
     }

    (三)使用,亲测有效

     /**
     * @author: Hhy <jackhhy520@qq.com>
     * @date: 2020/7/2 0002
     * @describe:打包下载
     */
     public function download(){
     $id= $this->request->param("id");
     if (is_array($id)){
      $ids=$id;
     }else{
      $ids=@explode(",",$id);
     }
     $data=$this->model->where('id', 'in',$ids)->select()->toArray();
     //dd($data);
    
     if (empty($data)) {
      $this->error("暂无数据");
     }
     $zip=new Jrkipdown();
     //打包下载
      $zip->zip_file($data);
     }

    热心网友 时间:2022-04-06 05:41

    PclZip下载这个包,配合thinkphp使用
    远程虚拟主机上传thinkphp之后如何直接绑定public/index.php?

    首先需要确定你的服务器是什么。如果是apache 需要在配置目录中指定目录。如果是nginx 也是需要在配置文件中指定目录。一般虚拟主机都会有配置文件管理,修改配置文件即可。

    JTTI服务器

    Jtti是一家新加坡全球网络基础服务商,为数百万个网站提供支持,提供香港服务器、新加坡服务器等多种全球服务器,自营全球多个数据中心,为用户提供优质的网络资源和服务。JTTI服务器整体性能是非常不错的,拥有CN2 GIA+BGP优化线路,多个节点可选,套餐配置支持自定义,经过第三方站长测评之后,获得了站长和客户的一致认可,无论是硬件性能,网络线路,还是带宽品质,都能够满足大陆用户的使用需求,以下是Jtti的服...

    thinkphp3.2.3 怎么上传form表单

    表示当前使用Ftp作为上传类的驱动,上传的文件会通过FTP传到指定的远程服务器。 也可以在实例化上传类的时候指定,例如: $config = array( 'maxSize' = 3145728, 'rootPath' = './Uploads/', 'savePath' = '', 'saveName' = array('uniqid',''), 'exts' = array('jpg', 'gif', 'png', 'jpeg')...

    2020最新PHP面试100题(三)

    90、写出以下php代码的运行结果。91、如何快速下载一个远程http服务器上的图片文件到本地?使用curl或fopen等函数实现。92、什么是时间戳?如何取得当前时间戳?答案:时间戳是从1970年1月1日到指定日期的秒数,使用time()函数获取。93、了解XSS攻击吗?如何防止?答案:XSS攻击通过注入恶意脚本,使用html...

    如何部署thinkphp到阿里云nginx服务器

    打开开始菜单&gt;远程桌面连接,或在开始菜单&gt;搜索中输入mstsc。也可以使用快捷键Win+R来启动运行窗口,输入mstsc后回车启动远程桌面连接。在远程桌面连接对话框中,输入实例的公网IP地址。单击显示选项。输入用户名,如小鸟云默认为niaoyun。单击允许我保存凭据,然后单击连接。这样以后登录就不需要手动输入密码了。

    php上传文件慢?

    打开php.ini,首先找到 file_uploads=on;是否允许通过HTTP上传文件的开关。默认为ON即是开 upload_tmp_dir;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹 upload_max_filesize=8m;望文生意,即允许上传文件大小的最大值。默认为2M post_max_size=8m;指通过表单POST给...

    php项目怎么部署到服务器(php项目怎么部署到服务器中)

    首先是要对数据结构进行规划,然后根据项目大小决定是否用php框架或模板技术,之后就是后台功能开发,最后再把数据在前台展示出来;这只是基本步骤,真正实施起来,涉及的东西是很多的,要注意的细节也很多Thinkphp5项目在nginx服务器部署 1,切换到nginx的配置目录,找到nginx.conf文件 ???cd?/usr/local/nginx/conf ??vim...

    网站源码怎么用?

    当文件上传完成后,整个上传网站源码至空间操作完成,当本地网站源码被更新后,为了第一时间实现远程服务器端数据的同步更新。问题三:下载的网站源码怎么用 30分 网站源码到空间首目录。这样就可以使用了。(触:index.asp/php是首页文件)采纳给分 问题四:网站源码怎么用, 可以直接拿来修改使用, 源代码就是程序和软...

    Cloudreve(云盘系统)v2.2官方版下载介绍_Cloudreve(云盘系统)v2.2官方...

    如果你正在寻找Cloudreve(云盘系统)v2.2官方版的详细下载指南,本文将为你提供所需的资讯。这个版本的云盘系统是一个强大的网络共享工具,它利用ThinkPHP React Redux Material-UI构建,支持多云存储,包括ThinkPHP、阿里云OSS、AWS S3、Onedrive等,并且还允许用户自建远程服务器和本地存储。作为网络磁盘...

    前端的代码怎么部署到服务器(前端代码发布流程)

    如何把项目部署到远程服务器上步骤如下:1、确保项目在MyEclipse上能够正常运行。2、在Tomcat安装目录下卖森的webapp目录中新建一个文件夹。3、将META-INF文件夹、WEB-INF文件夹及所有的前端代码复制到第2步新建的文件夹中。4、将build中的classes文件夹复制到WEB-INF文件夹中。5、启动Tomcat即可访问,...

    vuejs怎么和php结合(php和vue可以配合使用吗?)

    主要就是给nginx加权限,vue部署后使用history路由时会去掉地址后面的‘#’号,打包部署后不加权限会有bug。小鸟云服务器niaoyun实例创建好之后,您可以使用以下任意一种方式登录服务器:远程桌面连接(MicrosoftTerminalServicesClient,MSTSC):采用这种方式登录,请确保实例能访问公网。php+vue.js怎么用照片...

    声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
    E-MAIL:11247931@qq.com
    大连公积金中山办事处在什么地方? 我是汕头市潮南区陇田镇东波村现住有线电视台后面有装宽带家里没有电 ... 汕头市1953年,1964年,1982年,1990年,2000年人口出生率和人口死亡率? 陇田镇乡镇概况 汕头历年出生人口 兴陇社区广东省汕头市潮南区陇田镇兴陇社区 田二社区广东省汕头市潮南区陇田镇田二社区 牙签遇到洗洁精的原理 多西他赛成分 横山智佐参与作品 thinkphp3.2文件打包怎么做 thinkphp的http::download怎么做下载文件 thinkphp中怎样调用php自带的压缩解压缩类 thinkphp5 怎么打包指定文件 rar 或者 zip thinkphp的文件下载怎么实现,急需具体的代码 有没有办法让表中的记录上下移动 IE缓存和历史记录到底有什么区别,保留哪一个能使下次访问这些网页速度变快 .在SQL语言中,要一条记录使用的是:() 求日记30篇。300字就行!记住是日记!记录每天的事! 有没有这样的安卓应用,点击一下记录此刻时间 然后可以添加描述 比如08:00 起床了 09:12 平时想记录一下家庭的美好日常,有没有什么相机拍摄、录像不错的,不要太贵哈! 手机上有没有一种软件,把想记录的资料记录下来,用的时候搜索一下就找到了 除了历史记录,还有什么可以记录使用电脑的记录? 用什么软件记录下一个好的语段? 晌心谷:记录一下我与小白劲炫ASX的五一游记 你还知道其他的生活小窍门吗搜集一下并记录下来吧生活小窍门信息来源效果? 前几天做了雀斑激光,来记录一下变化过程 在家宅得无聊,记录一下和小黑的碎碎念——广汽丰田iA5使用心得 周亚夫军细柳以第一人称视角记录一下此次劳军的所见所闻 记录下 用英语怎么说 Thinkphp 5怎么引入css,js文件? thinkphp怎么引用钉钉配置文件包 thinkphp 文件夹到底该怎么放置 thinkphp如何记录下载次数 thinkphp怎么将文件夹压缩成zip python的selenium爬虫怎么换代理 找不到config.inc.php没有config.inc.php这个文件 config.inc.php文件在哪 config.inc.php在哪 论坛config.inc.php 怎么查看 phpMyAdmin-2.10.0.2-all-languages.tar.gz版本里的找不config.inc.php config.inc.php文件在网站哪里 php 中的 config.inc.php 为什么我的mysql没有config.inc.php配置文件 我下载的phpMyAdmin没有config.inc.php phpcms config.inc.php在哪 config.inc.php这个东西在根目录的哪个下面 网上下载的PHP文件模板怎样打开,config.inc.php怎么修改呢? 为什么没有config.inc.php这个文件阿 我的phpmyadmin里为什么找不到在个文件config.inc.php
    • 焦点

    最新推荐

    猜你喜欢

    热门推荐