十,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,可能不适合中国人用,因为没有看到修改列名的功能.也许 ...
随机推荐
- centos7 安装docker-ce ,最新版本docker,docker阿里云加速
直接用yum install docker -y安装的docker版本为1.12,但是docker发展很快,现在都17.06.2了.docker-ce是指docker的社区版 卸载老版本的 docke ...
- 3D Math Keynote
[3DMathKeynote] 1.常用公式. 1)(A*B)^T = B^T*A^T. 2)(A*B)^-1 = B^-1*A^-1. 3)|A*B| = |A|*|B|. 4)|M^T|=|M ...
- 【SPOJ -NSUBSTR】Substrings 【后缀自动机+dp】
题意 给出一个字符串,要你找出所有长度的子串分别的最多出现次数. 分析 我们建出后缀自动机,然后预处理出每个状态的cnt,cnt[u]指的是u这个状态的right集合大小.我们设f[len]为长度为l ...
- winfrom在图片上实现绘制
在控件加载入图片的基础上进行绘制内容 添加文字 首先就是要确定输入的文字,还有文字的样式. 文字的样式用到了FontDialog控件,获取文字呢,就放个textbox就可以了.如果在输入文字的显示展示 ...
- mac上,sudo启动IDEA
cd /Applications/IntelliJ IDEA 14.app/Contents/MacOS sudo ./idea # 就是这个启动,我一开始没有找到这个启动项...这样你就能运行80端 ...
- combotree 满足条件的节点不可选中
combotree: $("#Parent").treegrid("unselect");
- CoderForces 687C The Values You Can Make (01背包,DP)
题意:给定 n 个硬币和一个值 k,问你在用一些硬币组成面值为 k的这些硬币还能组成多少种其他面值. 析:如果这样说,由这些硬币能组成多少种不同的面值,那么是不是就很熟悉了,这不就是01背包么,这个题 ...
- ThinkPhp数据缓存技术
1.缓存初始化 在 ThinkPHP 中,有一个专门处理缓存的类:Cache.class.php(在Thinkphp/Library/Think/cache.class.php,其他的各种缓存类也在这 ...
- Android学习笔记——文件路径、内容Uri学习笔记[转]
一.URI 通用资源标志符(Universal Resource Identifier, 简称"URI"). Uri代表要操作的数据,Android上可用的每种资源 - 图像.视频 ...
- 【图解HTTP】第一章 了解web及网络基础
[图解HTTP]了解Web及网络基础 Web页面是如何呈现的?根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源(resource)等信息,从而显示出Web页面. 这种通过 ...