10大优享服务
62项会员特权
1000
雇佣
小程序开发
收藏
PHP下载远程文件
项目地区:益阳市
任务圆满完成
需求描述:
PHP下载远程文件,并实时发送给客户端浏览器下载
下载远程文件,在文件在下载的同时,把文件发送给浏览器用户下载。
例如,远程文件为 文件大小不限
当用户请求地址 时候, 直接下载远程文件 ,下载的同时,在未完整保存到服务器硬盘前,直接实时发送给用户浏览器。等用户下载完后,再保存到服务器硬盘。


要求使用Curl,我使用了fopen($url,'rb')的方式,很有问题,下载速度很慢,而且当多台电脑进行下载的时候,速度会更慢--服务器带宽是500M不存在带宽不够的问题。如果下载的不是远程文件,是本地文件,例如c:\ 速度很快,所以问题在于fopen。


要求程序兼容PHP 5.3 5.6 和,支持超过1G大小的大文件,同时要考虑到服务器CPU 内存等消耗问题。服务器环境为 Windows Server 2016,IIS 10,SQL SERVER 2016,兼容 Windows Server 2008 R2 IIS 7.5


下面是能运行,但运行不好的PHP代码。同时这段代码不能运行与php 5.6和貌似最高只能运行在PHP5.39


  // 暂不支持断点续传
  $url = '
  // $url ='              //如果地址时本地文件,下载速度极快
  $file = basename($url);
  $header = get_headers($url, 1);
  $size = $header['Content-Length'];
 
  $fp = fopen($url, 'rb');
  if ($fp === false) exit('文件不存在或打开失败');
 
  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename="'.$file.'"');
  header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
  header('Content-Length: ' . $size);
 
  ob_clean();
  ob_end_flush();
  set_time_limit(0);
   
  $chunkSize = 1024 * 100;
  while (!feof($fp)) {
    $buffer = fread($fp, $chunkSize);
    echo $buffer;
    ob_flush();
    flush();
  }
  fclose($fp);
  exit;
登录查看详细需求描述
任务流程:

雇主

发布需求

威客

报名竞价

雇主

选择中标

雇主

托管赏金

威客

在线工作

雇主

验收付款

任务圆满完成

为保障雇主与服务商的共同权益,任务结束后稿件详情将不对外展示!

服务
该服务商暂无服务推荐
您可以直接联系TA
11
收到稿件数