十,PHP下载文件
1,文件类型
(1)文本文件,如xx.txt。
(2)二进制文件,如图片、视频、音频。
2,文件下载流程如下图所示,首先浏览器向服务器发送下载请求,服务器将下载资源读入内存,再通过http将资源返回到指定的目录。

3,下载具体代码如下:
function down_file($file_name, $file_sub_dir){
// $file_name="se.jpg";
//php文件系统默认是gb2312,我们现在通用的utf-8,因此需要把文件名转化为gb2312
$file_name = iconv("utf-8","GB2312",$file_name);
$file_path = $_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
// $file_path = $_SERVER['DOCMENT_ROOT']."/images/".$file_name;
//1。打开文件
if(!file_exists($file_path)){
echo "文件不存在!";
return;
}
$fp = fopen($file_path,"r");
$file_size = filesize($file_path);
if($file_size > 1024*10*1024){ //限制下载大文件,10M
// echo "文件过大,不能下载";
echo "<script language='javascript'>window.alert('文件太大,不提供下载服务!');</script>";
return;
}
//返回的文件
header("Content-type:application/octet-stream");
//按照字节大小返回
header("Accept-Ranges:bytes");
//返回文件大小
header("Accept-Length:$file_size");
//这里客户端的弹出对话框,对应的文件名
header("Content-Disposition:attachment;filename=".$file_name);
//向客户端回送数据,分次传送
$buffer = 1024;
$file_count = 0;
while(!feof($fp) && ($file_size-$file_count > 0)){
$file_data = fread($fp,$buffer);
$file_count += $buffer;
echo $file_data;
}
fclose($fp);
}
down_file("se.jpg", "/blog/webroot/images/");
注意:(1)php的文件系统比较旧,用的字符编码是gb2312,现在大部份文件是utf-8编码,因此需要对文件名进行转码,将utf-8转化为gb2312:
$file_name = iconv("utf-8","GB2312",$file_name);
(2)文件路径用绝对路径,也可以使用相对路径,绝对路径效率更高,
$file_path = $_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
php相对路径表示,比如代码页a.php,同目录下有个文件夹image,文件夹中有b.jpg,那么a.php;利用相对路径引用b.jpg时候
$file_path = "./image/b.jpg";
如果image和a.php的父目录同级别,
$file_path = "./../image/b.jpg";
4,网页禁止某个ip访问,
if($_SERVER['REMOTE_ADDR'] == "192.168.1.100"){
echo "禁止你访问!";
}
5,防盗链技术,网站中某些网页希望登陆之后查看,
<?php
/**
* Created by PhpStorm.
* User: usa007lhy
* Date: 2015/10/18
* Time: 19:54
*/
if(isset($_SERVER['HTTP_REFERER'])){
if(strpos($_SERVER['HTTP_REFERER'],"http://localhost/http") == 0){
echo "韩顺平的账号信息...";
}else{
header("Location:warning.php");
}
}else{
header("Location:warning.php");
}
?>
十,PHP下载文件的更多相关文章
- 《手把手教你》系列技巧篇(五十六)-java+ selenium自动化测试-下载文件-上篇(详细教程)
1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- javaweb学习总结二十六(response对象的用法二 下载文件)
一:浏览器打开服务器上的文件 1:读取服务器上面的资源,如果在web层,可以直接使用servletContext,如果在非web层 可以使用类加载器读取文件 2:向浏览器写数据,实际上是把数据封装到r ...
- 分布式进阶(十) linux命令行下载文件以及常用工具:wget、Prozilla、MyGet、Linuxdown、Curl、Axel
linux命令行下载文件以及常用工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 本文介绍常用的几种命令行式的下载工具:wget.Prozilla.MyGet.Li ...
- Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail
文件上传概述 1.文件上传的作用 例如网络硬盘,就是用来上传下载文件的. 在网络浏览器中,时常需要上传照片 2.文件上传对页面的要求 上 ...
- selenium测试(Java)--下载文件(十六)
下载文件需要在Firefox 的profile属性中配置一些参数,如下面的代码: package com.test.download; import java.io.File; import org. ...
- katalon系列十二:自动化上传文件、下载文件
一.下载文件1.下载文件时,需要先设置好Chrome/Firefox下载路径.不弹出下载框等,大家先学习下在selenium下如何设置:https://www.cnblogs.com/fnng/p/7 ...
- qt http 下载文件
本文章介绍如何利用HTTP从网站上下载文件.在Qt网络编程中,需要用到协议,即HTTP.它是超文本传输协议,它是一种文件传输协议.对于HTTP就不多解释了. 在Qt网络编程中,需要用到协议,即HTTP ...
- Django学习之十: staticfile 静态文件
目录 Django学习之十: staticfile 静态文件 理解阐述 静态文件 Django对静态文件的处理 其它方面 总结 Django学习之十: staticfile 静态文件 理解阐述 ...
- flask上传下载文件(一)下载
简介: 作为一个可以和用户交互的web应用,必然要有数据导出功能,导出到excel是比较常用的方式. flask有一个扩展叫flask-excel,可能不适合中国人用,因为没有看到修改列名的功能.也许 ...
随机推荐
- Linux Debian 下LNMP服务器——nginx+mysql+php环境搭建及配置
昨天刚给公司服务器装了LNMP服务器环境,在这里简单记录一下过程备忘. 这里我在安装的时候是用的Dotdeb源,仅供参考. 1.导入Dotdeb源,据说Dotdeb源里的软件版本比较新. 在向源中导入 ...
- 【转】Pixel-Fillrate
[Pixel-Fillrate] “填充率“以每秒钟填充的像素点为单位,“三角形(多边形)生成速度“则表示每秒钟三角形(多边形)生成个数.现在的3D显卡的性能也主要看着两项指标,这两项指标的数值越大, ...
- SMTPSenderRefused: (530, ‘5.5.1 Authentication Required. Learn more at \n5.5.1
在跟着<Flask Web开发:基于Python的Web应用开发实战>一书学习时,出现了以上错误提示. 问题出于第11章--博客文章.当运行 python manage.py runser ...
- Python基础:列表,元组和字典的基本操作
列表(集合list)的基本操作: # 列表的常见操作 nameList = ["张学友", "刘德华", "郭富城", "黎明&q ...
- Servlet小案例总结
亮点: 没有使用任何框架,视图层和业务层使用Servlet技术进行交互,持久层用java的jdbc工具类进行数据交互 较为底层,比较基础的工具类比较多,比如: BeanFactory工具类使用dom4 ...
- 用 python 实现各种排序算法-乾颐堂
总结了一下常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成 ...
- Greeplum 系列(四) 数据的装载与卸裁
Greeplum 系列(四) 数据的装载与卸裁 装载数据有以下种方法: insert copy 外部表 gpload 下面以 member_delta 表为例分别介绍这四种方法. create tab ...
- sed命令n,N,d,D,p,P,h,H,g,G,x解析2
摘自: https://blog.csdn.net/xiexingshishu/article/details/50514132 sed命令n,N,d,D,p,P,h,H,g,G,x解析 2016年0 ...
- Notepad++ xml/json格式化
Xml格式化: 1. 安装XML Tools插件 (1) 通过网址http://sourceforge.net/projects/npp-plugins/files/XML%20Tools/下载XML ...
- 实践作业3:白盒测试----第三次小组会DAY8
我们小组于12月11日在东九教学楼召开了会议,小组第二次会议中就讨论了被测系统中风险最高的模块,于是选择管理员的教师添加模块,针对代码展开静态评审.这一次会议,小组主要讨论了应该从哪些方面来测评代码的 ...