方法一,采用fread()函数切片下载,适合大流量下载。可以限速下载,但容易导致内存溢出,下载失败。
public function fileUrl($url)
{
$file = 'uploads/files/'.$url;
if (file_exists(\dirname(__FILE__).$file)) {
return $this->error("文件不存在");
}
// 新文件名
$filename = explode('.', $file);
$filename = array_pop($filename);
$filename = time().'.'.$filename;
//下载文件
$filesize = filesize($file) + 1000;
header('Content-Description:File Transfer');
header("Content-Type:application/octet-stream");
header('Content-Transfer-Encoding:binary');
header("Accept-Ranges: bytes");
header('Expires:0');
header('Cache-Control:must-revalidate');
header('Pragma:public');
header("Content-Length:".$filesize);
header("Content-Disposition:attachment;filename=".$filename);
$fp = fopen($file, "rb");
fseek($fp,0);
while (!feof($fp)) {
set_time_limit(0);
print (fread($fp, 1024 * 8));
flush();
ob_flush();
}
fclose($fp);
exit ();
}方法二,不限速不切片无限制的形势下载,适合小文件下载。
public function fileUrl2($url)
{
$file = 'uploads/files/'.$url;
if (file_exists(\dirname(__FILE__).$file)) {
return $this->error("文件不存在");
}
// 新文件名
$filename = explode('.', $file);
$filename = array_pop($filename);
$filename = time().'.'.$filename;
header('Content-type:application/octet-stream');
header('Content-Disposition:attachment;filename='.$filename);
header('Content-Length:'.filesize($file));
readfile($file);
}帝国CMS教程
织梦cms教程
discuz教程
ecshop教程
phpcms教程
wordpress教程
苹果cms教程
php教程
数据库教程
微信小程序教程
python教程
css教程
js教程
视频教程
电子书
热门推荐- 01 分享几个随机美女图api接口 3843热度
- 02 优学院自动刷课PHP代码 699热度
- 03 php文件限速下载示例代码 626热度
- 04 随机二次元图片API接口源码 557热度
- 05 php一键打包压缩目录文件代码示例 458热度
