php实现文件下载/导出

以php框架为例,点击执行控制器的某个方法实现文件下载或导出

1 如果文件已可以就存在(可以导出任何文件)

$filename = ROOT_PATH."public/static/card/1.txt";  // 要下载的文件必须存在
$arr = explode('.',$filename);
$ext = array_pop($arr); // 判断文件类型

header("Content-Type: application/octet-stream"); // 声明文件类型 以二进制流文件(可以是任何格式的文件)
// 根据浏览器类型 声明作为附件处理和下载后文件的名称
// Content-Disposition : 以什么方式下载 ; Content-Disposition:attachment :以附件的形式下载
// 例如如果下载的文件是txt 用户下载时保存时命名为 1.txt
if (preg_match("/MSIE/",$_SERVER['HTTP_USER_AGENT'])){
      header('Content-Disposition:attachment;filename="1."'.$ext.'');
}elseif(preg_match("/Firefox/",$_SERVER['HTTP_USER_AGENT'])){
      header('Content-Disposition:attachment;filename*="1.'.$ext.'"');
}else{
      header('Content-Disposition:attachment;filename="1.'.$ext.'"');
}
// 输出内容
echo file_get_contents($filename);
exit; // 这个退出可以试一下加和不加的区别

上面的方法会在服务器中生成文件实现下载,如果想不在服务器生成文件只是以 txt 形式供用户下载,直接声明类型输出内容即可

2 文件一开始不存在,通过此方法将内容以某种文件导出(此处以 txt 文件为例),可以在服务器上存文件也可以不存

$ext = 'txt'; // 判断文件类型
$content = '12312';

header("Content-Type: application/octet-stream"); // 声明文件类型 以二进制流文件(可以是任何格式的文件)
// 根据浏览器类型 声明作为附件处理和下载后文件的名称
// Content-Disposition : 以什么方式下载 ; Content-Disposition:attachment :以附件的形式下载
// 例如如果下载的文件是txt 用户下载时保存时命名为 1.txt
if (preg_match("/MSIE/",$_SERVER['HTTP_USER_AGENT'])){
      header('Content-Disposition:attachment;filename="1."'.$ext.'');
}elseif(preg_match("/Firefox/",$_SERVER['HTTP_USER_AGENT'])){
      header('Content-Disposition:attachment;filename*="1.'.$ext.'"');
}else{
      header('Content-Disposition:attachment;filename="1.'.$ext.'"');
}
// 输出内容
echo $content; // 这里直接把内容以txt文件输出
//  $filename = ROOT_PATH."public/static/1.txt"; 文件地址
//  file_put_contents($filename,$content);  //写入内容到文件保存到服务器上.文件不存在则创建
//  echo file_get_contents($filename); // 以txt文件输出文件内容
exit; // 这个可以试一下加和不加的区别

最后的退出加和不加的区别在于:不加是 HTML Document 加了就是 Text Document

php实现文件下载/导出_第1张图片

php实现文件下载/导出_第2张图片

PS : 常用的header定义汇总

header('HTTP/1.1 200 OK');  // ok 正常访问
header('HTTP/1.1 404 Not Found'); //通知浏览器 页面不存在
header('HTTP/1.1 301 Moved Permanently'); //设置地址被永久的重定向 301
header('Location: http://www.ithhc.cn/'); //跳转到一个新的地址
header('Refresh: 10; url=http://www.ithhc.cn/'); //延迟转向 也就是隔几秒跳转
header('X-Powered-By: PHP/6.0.0'); //修改 X-Powered-By信息
header('Content-language: en'); //文档语言
header('Content-Length: 1234'); //设置内容长度
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); //告诉浏览器最后一次修改时间
header('HTTP/1.1 304 Not Modified'); //告诉浏览器文档内容没有发生改变
  
###内容类型###
header('Content-Type: text/html; charset=utf-8'); //网页编码
header('Content-Type: text/plain'); //纯文本格式
header('Content-Type: image/jpeg'); //JPG、JPEG
header('Content-Type: application/zip'); // ZIP文件
header('Content-Type: application/pdf'); // PDF文件
header('Content-Type: audio/mpeg'); // 音频文件
header('Content-type: text/css'); //css文件
header('Content-type: text/javascript'); //js文件
header('Content-type: application/json'); //json
header('Content-type: application/pdf'); //pdf
header('Content-type: text/xml'); //xml
header('Content-Type: application/x-shockw**e-flash'); //Flash动画
  
######
  
###声明一个下载的文件###
header('Content-Type: application/octet-stream'); //声明输出的是二进制字节流
header('Accept-Ranges:bytes');//声明浏览器返回大小是按字节进行计算
header('Content-Disposition: attachment; filename="ITblog.zip"');
//声明作为附件处理和下载后文件的名称//告诉浏览器文件的总大小

//告诉浏览器文件的总大小
    $fileSize = filesize($filePath);//坑 filesize 如果超过2G 低版本php会返回负数
    header('Content-Length:' . $fileSize); //注意是'Content-Length:' 非Accept-Length

header('Content-Transfer-Encoding: binary');
readfile('test.zip');
######
  
###对当前文档禁用缓存###
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
######
  
###显示一个需要验证的登陆对话框###
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
######
  
  
###声明一个需要下载的xls文件###
header('Content-Disposition: attachment; filename=ithhc.xlsx');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Length: '.filesize('./test.xls'));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');

header('Pragma: public')

 

你可能感兴趣的:(php)