php文件安全实现方法,php安全下载大文件的实现代码
先来看下一般文件的安全下载方法: 代码示例:
php
/**
* 一般文件安全下载
* edit www.#
*/
$durl = 'file/phpcms2008_o2abf32efj883c91a.iso';
$filename = 'phpcms2008_o2abf32efj883c91a.iso';
$file = @fopen($durl, 'r');
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".filesize($durl));
header("Content-Disposition: attachment; filename=".$filename);
echo fread($file,filesize($durl));
fclose($file);
?>
以上的代码,在遇到大文件时,超过php.ini配置的内存最大值的文件时,服务器会非常占用CPU资源,文件不能正常下载,只能下载几十Kb的文件。
可以用下面的代码来解决: 代码示例:
/**
* 大文件
安全下载的实现代码
* edit www.#
*/
function download($url, $filename) {
// 获得文件大小, 防止超过2G的文件, 用sprintf来读
$filesize = sprintf ( "%u", filesize ( $url ) );
if (! $filesize) {
return;
}
header ( "Content-type:application/octet-stream\n" ); //application/octet-stream
header ( "Content-type:unknown/unknown;" );
header ( "Content-disposition: attachment; filename=\"" . $filename . "\"" );
header ( 'Content-transfer-encoding: binary' );
if ($range = getenv ( 'HTTP_RANGE' )) { // 当有偏移量的时候,采用206的断点续传头
$range = explode ( '=', $range );
$range = $range [1];
header ( "HTTP/1.1 206 Partial Content" );
header ( "Date: " . gmdate ( "D, d M Y H:i:s" ) . " GMT" );
header ( "Last-Modified: " . gmdate ( "D, d M Y H:i:s", filemtime ( $url ) ) . " GMT" );
header ( "Accept-Ranges: bytes" );
header ( "Content-Length:" . ($filesize - $range) );
header ( "Content-Range: bytes " . $range . ($filesize - 1) . "/" . $filesize );
header ( "Connection: close" . "\n\n" );
} e
lse {
header ( "Content-Length:" . $filesize . "\n\n" );
$range = 0;
}
loadFile ( $url );
}
function loadFile($filename, $retbytes = true) {
$buffer = '';
$cnt = 0;
$handle = fopen ( $filename, 'rb' );
if ($handle === false) {
return false;
}
while ( ! feof ( $handle ) ) {
$buffer = fread ( $handle, 1024 * 1024 );
echo $buffer;
ob_flush ();
flush ();
if ($retbytes) {
$cnt += strlen ( $buffer );
}
}
$status = fclose ( $handle );
if ($retbytes && $status) {
return $cnt; // return num. bytes delivered like readfile() does.
}
return $status;
}
?>
调用示例: 代码示例:
//大文件的安全下载
dow
nload($url, $filename);
php文件安全实现方法,php安全下载大文件的实现代码相关推荐
- requests下载大文件_11种方法教你用Python高效下载资源!
在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的文件. ...
- Response.WriteFile 无法下载大文件解决方法
以前用Response.WriteFile(filename),但当遇到大文件时无法完整下载. 该方法最大的问题,它不是直接将数据抛到客户端,而是在服务器端(IIS)上缓存.当下载文件比较大时,服务器 ...
- php 7.0 readfile_php readfile下载大文件失败的解决方法
本文实例讲述了php readfile下载大文件失败的解决方法.分享给大家供大家参考,具体如下: 大文件有200多M,只下载了200K就提示下载完成,且不报错. 原因是PHP内存有限制,需要改为按块下 ...
- libcurl使用多线程下载大文件源码示例!
使用libcurl多线程下载大文件的基本思想: 首选打开文件,将文件等分为指定的片段,使用http range下载,一个线程下载一个片段,当线程下载片段时,它们将数据写到打开文件的指定位置,类似BT文 ...
- python下载大文件-使用请求在python中下载大文件
请求是一个非常好的库.我想用它下载大文件(>1GB).问题是不可能将整个文件保存在内存中,我需要将其分块读取.以下代码有问题 1 2 3 4 5 6 7 8 9 10 11import requ ...
- Android 开发工具类 27_多线程下载大文件
多线程下载大文件时序图 FileDownloader.java 1 package com.wangjialin.internet.service.downloader; 2 3 import jav ...
- python断点续传下载_Python 3 爬虫|第12章:并发下载大文件 支持断点续传
1. stream 流式下载大文件 1.1 stream=True 和 iter_content() 我们将继续使用 Python 3 爬虫|第3章:同步阻塞下载 所搭建的测试环境,在 Nginx 默 ...
- 百度文件下载慢怎么办?~教你百度网盘无需VIP离线下载大文件
百度文件下载慢怎么办?-教你百度网盘无需VIP离线下载大文件 众所周知,百度网盘的文件已经对非会员进行了各种限速.不过由于国内其他网盘基本都残废了,百度网盘作为仅存的少数几个,需求还是很大的,经常会碰 ...
- [MAC]Google Drive下载大文件
在使用Chrome从Google Drive下载8G数据集的过程中,多次出现网络错误问题导致下载失败,特在此记录解决方法. 下载前提:已成功翻墙 一.出错原因: Google Drive下载大文件的时 ...
最新文章
- 夏天来了,你的数据中心应该跟着热起来
- pandas使用fillna函数将dataframe中的缺失值按照列均值进行填充(fill missing values with the mean of the column)
- [MOSS 译]如何:在WEB内容查询部件中使用自定义的字段
- Linux环境下安装Python第三方库
- 手机客户端测试点(全)
- 用C语言用指针怎么算通用定积分,C语言:利用指针编写程序,用梯形法计算给定的定积分实例...
- pyqt5从子目录加载qrc文件_实战PyQt5: 045-添加资源文件
- Win10 owerShell Get命令大全
- 内存超频trfc_内存超频教学
- Atom飞行手册翻译: 2.2 在Atom中移动
- 安装 Windows 自动化 API 3.0 时,visual Studio 2010 更快地运行
- 【毕业设计】JAVA网络通信系统的研究与开发(论文+源代码+开题报告)
- Telnet命令在Linux / Unix中的用法
- ADO.NET数据访问模式
- Jupyter Notebook打开时报错的问题解决办法
- linux如何用命令进入u盘,linux 下如何打开u盘
- 基于android的交流平台,参阅:基于android的大学生信息交流平台的设计与实现
- 【读书笔记】薛兆丰经济学讲义——人人都要掌握的经济学思维
- JVM_虚拟机执行子系统
- uniapp微信小程序引入第三方字体库
热门文章
- 开源 | App 开发神仙工具:帮你抓 Bug
- R语言 深圳 面授_「深圳侦探电话」用R语言实现深度学习情感分析
- python获取当时文件目录_python获取文件目录
- 未捕获typeerror: $形象。cropper不是函数_没有学不会的python--细说函数
- 安规电容能用什么代替_电容系列之安规电容
- 将一个简单远程调用的方式例子改为异步调用
- Thinkpad上安装Ubuntu相关事项
- canvas基本用法
- C#中线程的使用[Thread in C#]
- java collections读书笔记(4) stack