下载远程文件,在文件在下载的同时,把文件发送给浏览器用户下载。
例如,远程文件为 文件大小不限
当用户请求地址 时候, 直接下载远程文件 ,下载的同时,在未完整保存到服务器硬盘前,直接实时发送给用户浏览器。等用户下载完后,再保存到服务器硬盘。
要求使用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;
雇主
发布需求
威客
报名竞价
雇主
选择中标
雇主
托管赏金
威客
在线工作
雇主
验收付款
任务圆满完成
为保障雇主与服务商的共同权益,任务结束后稿件详情将不对外展示!