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下载文件的更多相关文章

  1. 《手把手教你》系列技巧篇(五十六)-java+ selenium自动化测试-下载文件-上篇(详细教程)

    1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件.因此宏哥就接着讲解和分享一下:自动化测试下载文件.可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就 ...

  2. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  3. javaweb学习总结二十六(response对象的用法二 下载文件)

    一:浏览器打开服务器上的文件 1:读取服务器上面的资源,如果在web层,可以直接使用servletContext,如果在非web层 可以使用类加载器读取文件 2:向浏览器写数据,实际上是把数据封装到r ...

  4. 分布式进阶(十) linux命令行下载文件以及常用工具:wget、Prozilla、MyGet、Linuxdown、Curl、Axel

    linux命令行下载文件以及常用工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 本文介绍常用的几种命令行式的下载工具:wget.Prozilla.MyGet.Li ...

  5. Javaweb学习笔记——(二十二)——————文件上传、下载、Javamail

    文件上传概述      1.文件上传的作用          例如网络硬盘,就是用来上传下载文件的.          在网络浏览器中,时常需要上传照片 2.文件上传对页面的要求          上 ...

  6. selenium测试(Java)--下载文件(十六)

    下载文件需要在Firefox 的profile属性中配置一些参数,如下面的代码: package com.test.download; import java.io.File; import org. ...

  7. katalon系列十二:自动化上传文件、下载文件

    一.下载文件1.下载文件时,需要先设置好Chrome/Firefox下载路径.不弹出下载框等,大家先学习下在selenium下如何设置:https://www.cnblogs.com/fnng/p/7 ...

  8. qt http 下载文件

    本文章介绍如何利用HTTP从网站上下载文件.在Qt网络编程中,需要用到协议,即HTTP.它是超文本传输协议,它是一种文件传输协议.对于HTTP就不多解释了. 在Qt网络编程中,需要用到协议,即HTTP ...

  9. Django学习之十: staticfile 静态文件

    目录 Django学习之十: staticfile 静态文件 理解阐述 静态文件 Django对静态文件的处理 其它方面 总结 Django学习之十: staticfile 静态文件 理解阐述     ...

  10. flask上传下载文件(一)下载

    简介: 作为一个可以和用户交互的web应用,必然要有数据导出功能,导出到excel是比较常用的方式. flask有一个扩展叫flask-excel,可能不适合中国人用,因为没有看到修改列名的功能.也许 ...

随机推荐

  1. swarmkit test

    swarmd -d /tmp/node-1 --listen-control-api /tmp/node-1/swarm.sock --hostname mhc --engine-addr=tcp:/ ...

  2. 判断当前Selection是否为prefab

    [判断当前Selection是否为prefab] PrefabUtility.GetPrefabParent(target) == null && PrefabUtility.GetP ...

  3. git本地代码库回滚(webstorm下)

    git本地代码库回滚(webstorm下) 1. 场景 添加了一个文件[file-for-test.js]到git的控制下(并没有push到远程分支上) 进行了三次修改,并分别进行了三次commit( ...

  4. 【LA3523 训练指南】圆桌骑士 【双连通分量】

    题意 有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置.如果发生意见分歧,则需要举手表决,因此参加会议的骑士数目必须是奇数,以防赞同和反 ...

  5. 【ZOJ3329】One Person Game

    题意 你有三枚色子,第i个色子有ki面,你有一个计数器. 1.开始的时候将计数器调至0 2.扔三个色子,如果色子1是a,色子2是b,色子3是c,则将计数器归零.否则计数器加上三个色子的和. 3.如果计 ...

  6. Codeforces 678E 状压DP

    题意:有n位选手,已知n位选手之间两两获胜的概率,问主角(第一个选手)最终站在擂台上的概率是多少? 思路:一看数据范围肯定是状压DP,不过虽然是概率DP,但是需要倒着推:我们如果正着推式子的话,初始状 ...

  7. WebPack 从安装到闲置

    序言:各种技术在研究过程中常常会出现在实际工作中难以实施的情况,于是就慢慢闲置,但学毕竟还是必须要学学的,就看能用到多少,至少开拓了眼界,谨以此安慰下那些学完又闲置的技术~ 跑题结束,以下开始正式配置 ...

  8. [SoapUI] 通过Groovy获取SoapUI当前Project所在的目录

    import com.eviware.soapui.support.GroovyUtils def groovyUtils = new GroovyUtils( context ) def proje ...

  9. 设计模式(java)--观察者模式

    转自:卡奴达摩http://blog.csdn.net/zhengzhb/article/details/7471978?reload#reply 定义:定义对象间一种一对多的依赖关系,使得当每一个对 ...

  10. linux的操作

    对tomcat的操作 打开终端 cd /java/tomcat#执行bin/startup.sh #启动tomcatbin/shutdown.sh #停止tomcat tail -f logs/cat ...