PHP如何强制下载文件

Posted PHP的那些事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP如何强制下载文件相关的知识,希望对你有一定的参考价值。

很多网站都需要做文件下载的功能.如果直接给连接的方式下载的话有很多的弊处。。。因为有时候需要对下载权限的检查,对下载次数的检查.所以一般采用php的方法进行安全下载.但是下载的时候如果是txt jpg或者pdf等一些浏览器可以直接识别的格式那么浏览器会默认选择直接在浏览器打开而不是保存在本机上。

但是有时我们不想让浏览器直接打开文件,如PDF文件,而是要直接下载文件,那么以下函数可以强制下载文件,函数中使用了application/octet-stream头类型。

代码如下:

function download($filename){ 
    if ((isset($filename))&&(file_exists($filename))){ 
       header("Content-length: ".filesize($filename)); 
       header(‘Content-Type: application/octet-stream‘); 
       header(‘Content-Disposition: attachment; filename="‘ . $filename . ‘"‘); 
       readfile("$filename"); 
    } else { 
       echo "Looks like file does not exist!"; 
    } 
}

使用方法如下:

download(‘/down/test_45f73e852.zip‘);
/**
 * 下载
 * @param [type] $filename [description]
 * @param string $dir  [description]
 * @return [type]   [description]
 */
function downloads($filename,$dir=‘./‘){
 $filepath = $dir.$filename;
 if (!file_exists($filepath)){
  header("Content-type: text/html; charset=utf-8");
  echo "File not found!";
  exit;
 } else {
  $file = fopen($filepath,"r");
  Header("Content-type: application/octet-stream");
  Header("Accept-Ranges: bytes");
  Header("Accept-Length: ".filesize($filepath));
  Header("Content-Disposition: attachment; filename=".$filename);
  echo fread($file, filesize($filepath));
  fclose($file);
 }
}

以上是关于PHP如何强制下载文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP强制文件下载[重复]

PHP强制下载.xlsx文件损坏

PHP强制下载.xlsx文件损坏

强制使用 PHP 下载文件

强制下载提示php损坏文件

如何使用 PHP 在移动设备上强制下载音频 mp3