浅析PHP文件下载原理


Posted in PHP onDecember 25, 2014

1、php下载原理图

浅析PHP文件下载原理

2、文件下载源码:

<?php

$file_name="哈哈.jpg";//需要下载的文件

$file_name=iconv("utf-8","gb2312","$file_name");

$fp=fopen($file_name,"r+");//下载文件必须先要将文件打开,写入内存

if(!file_exists($file_name)){//判断文件是否存在

    echo "文件不存在";

    exit();

}

$file_size=filesize("a.jpg");//判断文件大小

//返回的文件

Header("Content-type: application/octet-stream");

//按照字节格式返回

Header("Accept-Ranges: bytes");

//返回文件大小

Header("Accept-Length: ".$file_size);

//弹出客户端对话框,对应的文件名

Header("Content-Disposition: attachment; filename=".$file_name);

//防止服务器瞬时压力增大,分段读取

$buffer=1024;

while(!feof($fp)){

    $file_data=fread($fp,$buffer);

    echo $file_data;

}

//关闭文件

fclose($fp);

?>

3、文件编码问题解决方法:

如果文件名是中文,php的函数不能识别中文文件名,一般如果程序编码为utf-8,php的函数比较古老,只能识别gb2312编码的中文,所以把中文用iconv(“原编码”,”要转成的编码”,”要转码的字符串”)函数可以转码。

比如,把一个字符串从utf-8转码为gb2312

$file_name=iconv(“utf-8”,”gb2312”,”$file_name”);

PHP 相关文章推荐
怎样在UNIX系统下安装MySQL
Oct 09 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
PHP print类函数使用总结
Jun 25 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
PHP中header和session_start前不能有输出原因分析
Jan 11 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
Smarty保留变量用法分析
May 23 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
php使用sql server验证连接数据库的方法
Dec 25 #PHP
php实现mysql事务处理的方法
Dec 25 #PHP
php使用pdo连接mssql server数据库实例
Dec 25 #PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 #PHP
完整删除ecshop中获取店铺信息的API
Dec 24 #PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 #PHP
thinkPHP实现表单自动验证
Dec 24 #PHP
You might like
php一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
Ionic快速安装教程
2016/06/03 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
vue移动端弹框组件的实例
2018/09/25 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
Python面向对象封装操作案例详解
2019/12/31 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
python与idea的集成的实现
2020/11/20 Python
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
2014年环境整治工作总结
2014/12/10 职场文书
故宫的导游词
2015/01/31 职场文书
人民检察院起诉书
2015/05/20 职场文书
门球健将观后感
2015/06/16 职场文书