[php] thinkphp基于Http类 下载文件

不熟悉的可以去Org/Net/Http 看看Http.class.php类文件 

 

一、使用curlDownload 采集远程文件

 

/**
 * 采集远程文件
 * @access public
 * @param string $remote 远程文件名
 * @param string $local 本地保存文件名
 * @return mixed
 */
static public function curlDownload($remote,$local) {
    $cp = curl_init($remote);
    $fp = fopen($local,"w");
    curl_setopt($cp, CURLOPT_FILE, $fp);
    curl_setopt($cp, CURLOPT_HEADER, 0);
    curl_exec($cp);
    curl_close($cp);
    fclose($fp);
}

 

调用:

 

$Http = new \Org\Net\Http();
$Http::curlDownload("http://h.hiphotos.baidu.com/image/pic/item/b64543a98226cffc9153e5b3bb014a90f603eab2.jpg", "./Public/file/1.jpg");

 

 

二、使用download 下载文件

 

/**
   * 下载文件
   * 可以指定下载显示的文件名,并自动发送相应的Header信息
   * 如果指定了content参数,则下载该参数的内容
   * @static
   * @access public
   * @param string $filename 下载文件名
   * @param string $showname 下载显示的文件名
   * @param string $content  下载的内容
   * @param integer $expire  下载内容浏览器缓存时间
   * @return void
   */
  static public function download ($filename, $showname='',$content='',$expire=180) {
      if(is_file($filename)) {
          $length = filesize($filename);
      }elseif(is_file(UPLOAD_PATH.$filename)) {
          $filename = UPLOAD_PATH.$filename;
          $length = filesize($filename);
      }elseif($content != '') {
          $length = strlen($content);
      }else {
          E($filename.L('下载文件不存在!'));
      }
      if(empty($showname)) {
          $showname = $filename;
      }
      $showname = basename($showname);
if(!empty($filename)) {
   $finfo     =  new \finfo(FILEINFO_MIME);
   $type  =  $finfo->file($filename);         
}else{
   $type  =  "application/octet-stream";
}
      //发送Http Header信息 开始下载
      header("Pragma: public");
      header("Cache-control: max-age=".$expire);
      //header('Cache-Control: no-store, no-cache, must-revalidate');
      header("Expires: " . gmdate("D, d M Y H:i:s",time()+$expire) . "GMT");
      header("Last-Modified: " . gmdate("D, d M Y H:i:s",time()) . "GMT");
      header("Content-Disposition: attachment; filename=".$showname);
      header("Content-Length: ".$length);
      header("Content-type: ".$type);
      header('Content-Encoding: none');
      header("Content-Transfer-Encoding: binary" );
      if($content == '' ) {
          readfile($filename);
      }else {
       echo($content);
      }
      exit();
  }

 

调用前,首先要确定有没有开启php_fileinfo扩展,没有的话,则会报错。。

wampserver开启方式:

选择php_fileinfo就行了

 

调用:

 

$Http = new \Org\Net\Http();
$filename="Public/file/test.doc";
$showname="test.doc";
$content = "this";  // 表示下载的文件内容只有this
$Http::download($filename, $showname, $content);

 

欢迎关注:http://www.fenxianglu.cn/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天空还下着雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值