一个简单的PHP文件下载方法 download
<?php
/*
*
*@param function downloadFile 文件下载
*
*@param string $filename 下载文件的路径(根目录下的绝对路径)
*
*@param int $status 错误提示状态 0:提示文件名错误 1:提示整个路径错误 404:提示错误
*
*@param string $defaultPath 默认的路径
* 要下载文件所在的路径
* 如果为空则在$filename里面就要加上路径,不为空$filename为要下载文件的文件名即可
*
*/
function downloadFile($filename,$status=404,$defaultPath="/////test/"){ header("Content-type:text/html;charset=utf-8");
//对下载文件路径进行操作
$filename = $defaultPath.$filename;
$filename = trim($filename,"/"); //去除文件路径左右的‘/’
$fileArr = explode("/",$filename);
$file_name = $fileArr[count($fileArr)-1]; //获取文件名 //当默认路径为空,且下载文件的路径只有文件名
if(empty($defaultPath) && count($fileArr)==1){
die("下载路径出错...");
} $path = "";
foreach ($fileArr as $key => $value) {
# code...
if($key==0){
$value = "/".$value; //定义第一层目录加'/',如把"aaa"转换成"/aaa"
}
if($key<count($fileArr)-1){
$path .= $value."/"; //获取路径的目录,到所下载文件的目录,如"/aaa/bbb/ccc/ddd/"
}
}
//var_dump($fileArr);
//用以解决中文不能显示出来的问题
$file_name=iconv("utf-8","gb2312",$file_name);
$file_sub_path=$_SERVER['DOCUMENT_ROOT'].$path;
$file_path=$file_sub_path.$file_name; //首先要判断给定的文件存在与否
if(!file_exists($file_path)){
if($status==0){
$error_info = $file_name; //提示文件名错误
}elseif($status == 1){
$error_info = $file_path; //提示整个路径错误
}else{
$error_info = "";
}
die("文件<b>".$error_info."</b>不存在");
} $fp=fopen($file_path,"r");
$file_size=filesize($file_path);
//下载文件需要用到的头
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_count<$file_size){
$file_con=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_con;
}
fclose($fp);
} $file = "ifdan.php"; downloadFile($file,1); ?>
- 一个简单的文件下载功能
一个简单的PHP文件下载方法 download的更多相关文章
- Java实现一个简单的加密解密方法
Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- Qt5.9一个简单的多线程实例(类QThread)(第一种方法)
Qt开启多线程,主要用到类QThread.有两种方法,第一种用一个类继承QThread,然后重新改写虚函数run().当要开启新线程时,只需要实例该类,然后调用函数start(),就可以开启一条多线程 ...
- 从一个简单的main方法执行谈谈JVM工作机制
本来JVM的工作原理浅到可以泛泛而谈,但如果真的想把JVM工作机制弄清楚,实在是很难,涉及到的知识领域太多.所以,本文通过简单的mian方法执行,浅谈JVM工作原理,看看JVM里面都发生了什么. 先上 ...
- js new一个对象的过程,实现一个简单的new方法
对于大部分前端开发者而言,new一个构造函数或类得到对应实例,是非常普遍的操作了.下面的例子中分别通过构造函数与class类实现了一个简单的创建实例的过程. // ES5构造函数 let Parent ...
- 一个简单的执行程序的GNU automake自动生成Makefile的方法及案例
一个简单的执行程序的GNU automake自动生成Makefile的方法及案例 在GNU的世界里,存在Automake这样的工具进行自动生成Makefile文件,automake是由Perl语言编写 ...
- 一个简单的C共享库的创建及Python调用此库的方法
/********************************************************************* * Author : Samson * Date ...
- FFmpeg: 一个简单测试手机解码效率的方法
先写一个获取当前时间戳的方法 long long GetNowMs() { struct timeval tv; gettimeofday(&tv, NULL); ; // 为了简化计算,否则 ...
- Java实现一个简单的缓存方法
缓存是在web开发中经常用到的,将程序经常使用到或调用到的对象存在内存中,或者是耗时较长但又不具有实时性的查询数据放入内存中,在一定程度上可以提高性能和效率.下面我实现了一个简单的缓存,步骤如下. 创 ...
随机推荐
- if a != None:
>>> x = 1 >>> not x False >>> x = [1] >>> not x False >>&g ...
- Qt核心剖析:信息隐藏
原文 http://devbean.blog.51cto.com/448512/326686 (一) 如果你阅读了 Qt 的源代码,你会看到一堆奇奇怪怪的宏,例如 Q_D,Q_Q.我们的Qt源码之旅就 ...
- 莫队或权值线段树 或主席树 p4137
题目描述 有一个长度为n的数组{a1,a2,…,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入格式 第一行n,m. 第二行为n个数. 从第三行开始,每行一个询问l,r. 输出格式 ...
- java后台接受不到vue传的参数
@RequestMapping(value = "/delBelowImg") @Transactional public R delBelowFile(@RequestParam ...
- jquer_shijian 增加初始化 年月日 及 结束时间 年月日
增加了插件 在初始化的时候,控制 年月日,和结束 年月日 $(time_createobj).siblings(".xtw_budget_userdatafn_hide").shi ...
- 验证码比较hash_equals 方法
验证码是否与缓存中一致时,使用了 hash_equals 方法: hash_equals($verifyData['code'], $request->verification_code) ha ...
- Swagger Learning Notes
背景 首先指定schema[计划的提纲],实时更新最新API,降低集成风险: 早些年:制定word计划文档:前后端分离: 前端测试后端接口:postman 后端提供接口,需要实时更新最新的消息改动 什 ...
- 5 asyncio 梨视频
# 如何提升requests模块爬取数据的效率?- 多进程或多线程(不建议) 太耗费资源- 线程池或进程池(适当使用) - 单线程 + 异步协程(推荐) # 线程池使用案例 # 梨视频 下载作业 im ...
- python 爬取图片
使用python的requests库爬取网页时,获取文本一般使用text方法,如果要获取图片并保存要用content 举个栗子,爬煎蛋网的图: #!/usr/bin/env python #-*- c ...
- mcast_set_ttl函数
#include <errno.h> #include <net/if.h> #include <sys/socket.h> #include <netine ...