PHP实现文件下载两种方式(a标签和header标签)
PHP实现文件上传
PHP实现文件下载两种方式(a标签和header标签)
- 文件的下载
- 1.标签a直接下载
- 2.采用Header方式下载
- 1. 下载文件对话框
- 2. 缓存指令
- 3. 清除缓存
文件的下载
1.标签a直接下载
<a href="/uploads/123465.docx" download="">download</a>
2.采用Header方式下载
<?php
ob_end_clean();
$file_name = "3.pdf"; //下载文件名
$file_dir = "./uploads/"; //下载文件存放目录
$file=$file_dir.$file_name;
//检查文件是否存在于目录
if (!file_exists ($file)) {header('HTTP/1.1 404 NOT FOUND');
} else {ob_end_clean();header('Content-Description: File Transfer');header('Content-Type: application/octet-stream');//请求范围的度量单位Header ( "Accept-Ranges: bytes" );//下载后的文件名称为$file_nameheader('Content-Disposition: attachment; filename='.$file_name);header('Content-Transfer-Encoding: binary');#Expires:设置页面缓存时间header('Expires: 0');header('Cache-Control: must-revalidate');header('Pragma: no cache');//Content-Length是指定包含于请求或响应中数据的字节长度header('Content-Length: ' . filesize($file));ob_clean(); flush();readfile($file);exit();ob_end_clean();
}
1. 下载文件对话框
<?php
// 输出 PDF 文件
header('Content-type: application/octet-stream');// 供一个推荐的文件名名称为 $file_name文件
header('Content-Disposition: attachment; filename='.$file_name);// 该 PDF 来源于$file_name
readfile($file_name);
?>
2. 缓存指令
PHP 脚本经常生成一些动态内容,它不该被客户端、服务器与浏览器之间的代理缓存,通过以下指令控制缓存。
<?php//设置缓存时间header('Expires: 0');header('Cache-Control: must-revalidate');?>
cache-control可取值:
no-cache
: 告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验。must-revalidate
:告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。
3. 清除缓存
如果不清楚缓存,在读取含图片的文件时,容易出现乱码等问题
- ob_end_clean();
- ob_clean(); flush();
web性能优化之:no-cache与must-revalidate深入探究
header官方文档
PHP实现文件下载两种方式(a标签和header标签)相关推荐
- 微信小程序文件下载两种方式
1. 基本url方式下载(自定义下载文件名称) downloadDailyYear: function() {util.get(api.downloadDailyYear).then(function ...
- PHP实现文件下载的两种方式(GuzzleHttp和Curl)
PHP实现文件下载的两种方式分别使用GuzzleHttp扩展和Curl扩展来实现.本例以下载PDF文件为例,实际上大家可以举一反三下载其他文件格式是一样的. 1.使用GuzzleHttp 扩展库 us ...
- Spring加载properties文件的两种方式
2019独角兽企业重金招聘Python工程师标准>>> 在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取pro ...
- kubernetes创建资源的两种方式
一.创建方式分类: 命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1.用 kubectl 命令行的方式直接创建,比如: kubectl run httpd-app --image ...
- matlab 转换 tfrecord,训练数据集与TFRecord互相转换的两种方式
TensorFlow使用TFRecord格式来统一存储数据,该格式可以将图像数据.标签信息.图像路径以及宽高等不同类型的信息放在一起进行统一存储,从而方便有效的管理不同的属性. 将训练数据集转成TFR ...
- com.android.sadk卸载不掉,Android的Service的两种方式以及使用
Service根据使用方式有两种:startService.bindService. 区别: ①启动方式:前者startService.后者bindService: ②和Activity联系:前者Ac ...
- java提交数据到另一个页面_JS实现把一个页面层数据传递到另一个页面的两种方式...
由于之前面试,被问到过此问题,所以今天特意整理了一下.由于自己技术水平有限,若存在错误,欢迎提出批评. 本博客整理了两种方式从一个页面层向另一个页面层传递参数. 一. 通过cookie方式 1. 传递 ...
- Struts2-表单验证的两种方式
1. Struts2中的输入校验 2. 编码方式校验 1) Action一定要继承自ActionSupport 2) 针对某个要进行校验的请求处理方法编写一个 public void vali ...
- 向服务器端提交数据的两种方式
朴素版: ...
- 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用
阅读目录 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5.变量(♥♥ ...
最新文章
- 3、将对象存储到zookeeper中,然后再拿下来还原
- Android-静态代理模式
- SAP Commerce Cloud Accelerator theme css 加载的问题和 multi step checkout
- 国学精典书籍阅读记录
- vr降噪器英文是什么_什么是VR体验馆设备?
- java 实现支持向量机
- sdram trp_TRP的完整形式是什么?
- 【数据库系统】再谈关系模型和关系型数据库
- 软件测试学生管理系统课程设计,软件测试课程设计-ERP进销存管理系统(1)
- c语言把一段编码注释,C语言编码规范——着重注意点整理
- BZOJ3312: [Usaco2013 Nov]No Change
- rosweb显示2d地图时,车在地图中的图形显示有时后特别大
- ROS中测试机器人里程计信息
- php实现标签打印,标签打印软件怎么实现批量套打标签?
- 解决OneNote无法联网
- 网页错误代码汇总(整理不易,用心记住)
- 如何清理占用计算机内存,告诉你如何深度清理电脑内存
- 三十二楼层选几层最好_楼层风水几楼最好 1一32高楼层选最佳楼层
- hadoop2.7.4在windows系统IDEA远程测试
- java基础之后台线程_繁星漫天_新浪博客
热门文章
- 前端实现导入(excel文件)导出(word)文件
- PaddleOCR整体了解
- 计算机cpu尺寸,英特尔CPU型号尺寸.doc
- Java人脸识别考勤系统_GitHub - magician1128/WorkAttendanceSystem: 一个基于opencv、dilb的员工人脸识别考勤系统...
- 自定义xml解析框架
- 产品读书《粉丝经济:传统企业转型互联网的突破口》
- PCB负片(PCB Negative)
- 87键盘怎么用小键盘功能
- 计算机中的信息计量单位字,计算机中信息的计量单位.pdf
- 计算机抖音链接,抖音怎么开始电脑直播