PHP下载文件,隐藏真实文件地址
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);
}

 

第一个函数会导致apache进程卡住。无法响应其他请求。 第二个函数,正常使用。

最后,推荐使用 xsendfile https://javascript.net.cn/article?id=626

 

真诚赞赏,手留余香
赞赏
随机推荐
Mac OS原来自带了apache,基本用法总结
LOGO设计的时候为什么要画那些圈圈?
20170313 夜晚停电
MySQL AUTO_INCREMENT 自动增长的一些知识
PHP解析XML文件
PHP 获取父分类和子分类常用递归函数
Naxsi 的 MainRule
jQuery.position()不可靠
Workerman 开启 WSS
树妖3