首页 » SEO优化 » php教程打包下载交换技巧_PHP实现下载与压缩文件的方法的封装与整理

php教程打包下载交换技巧_PHP实现下载与压缩文件的方法的封装与整理

访客 2024-11-16 0

扫一扫用手机浏览

文章目录 [+]

此方法为大文件下载的实现,纵然几个G也可实现本地的下载。
可以测试一下,或者等你从中改进...

function downloadFile($filename){ //获取文件的扩展名 $allowDownExt=array ( 'rar','zip','png','txt','mp4','html'); //获取文件信息 $fileext=pathinfo($filename); //检测文件类型是否许可下载 if(!in_array($fileext['extension'],$allowDownExt)) { return false; } //设置脚本的最大实行韶光,设置为0则无韶光限定 set_time_limit(0); ini_set('max_execution_time', '0'); //通过header()发送头信息 //由于不知道文件是什么类型的,见告浏览器输出的是字节流 header('content-type:application/octet-stream'); //见告浏览器返回的文件大小类型是字节 header('Accept-Ranges:bytes'); //得到文件大小 //$filesize=filesize($filename);//(此方法无法获取到远程文件大小) $header_array = get_headers($filename, true); $filesize = $header_array['Content-Length']; //见告浏览器返回的文件大小 header('Accept-Length:'.$filesize); //见告浏览器文件作为附件处理并且设定终极下载完成的文件名称 header('content-disposition:attachment;filename='.basename($filename)); //针对大文件,规定每次读取文件的字节数为4096字节,直接输出数据 $read_buffer=4096; $handle=fopen($filename, 'rb'); //总的缓冲的字节数 $sum_buffer=0; //只要没到文件尾,就一贯读取 while(!feof($handle) && $sum_buffer<$filesize) { echo fread($handle,$read_buffer); $sum_buffer+=$read_buffer; } //关闭句柄 fclose($handle); exit;}

三,PHP扩展类ZipArchive实现压缩Zip文件和文件打包下载

php教程打包下载交换技巧_PHP实现下载与压缩文件的方法的封装与整理

这是一个类,封装了方法,也可以考试测验一下!

php教程打包下载交换技巧_PHP实现下载与压缩文件的方法的封装与整理
(图片来自网络侵删)

<?php/ 关于文件压缩和下载的类 @author tycell @version 1.0 /class zip_down{ protected $file_path; / 布局函数 @param [string] $path [传入文件目录] / public function __construct($path){ $this->file_path=$path; //要打包的根目录 } / 入口调用函数 @return [type] [以二进制流的形式返回给浏览器下载到本地] / public function index(){ $zip=new ZipArchive(); $end_dir=$this->file_path.date('Ymd',time()).'.zip';//定义打包后的包名 $dir=$this->file_path; if(!is_dir($dir)){ mkdir($dir); } if($zip->open($end_dir, ZipArchive::OVERWRITE) === TRUE){ ///ZipArchive::OVERWRITE 如果文件存在则覆盖 $this->addFileToZip($dir, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的工具通报给方法 $zip->close(); } if(!file_exists($end_dir)){ exit(\"大众无法找到文件\"大众); } header(\公众Cache-Control: public\"大众); header(\"大众Content-Description: File Transfer\公众); header(\"大众Content-Type: application/zip\"大众); //zip格式的 header('Content-disposition: attachment; filename='.basename($end_dir)); //文件名 header(\"大众Content-Transfer-Encoding: binary\"大众); //见告浏览器,这是二进制文件 header('Content-Length:'.filesize($end_dir)); //见告浏览器,文件大小 @readfile($end_dir); $this->delDirAndFile($dir,true);//删除目录和文件 unlink($end_dir);////删除压缩包 } / 文件压缩函数 须要开启php zip扩展 @param [string] $path [路径] @param [object] $zip [扩展ZipArchive类工具] / protected function addFileToZip($path, $zip){ $handler = opendir($path); while (($filename=readdir($handler)) !== false) { if ($filename!= \公众.\"大众 && $filename!=\"大众..\"大众){ if(!is_dir($filename)){ $zip->addFile($path.\公众/\"大众.$filename,$filename); //第二个参数避免将目录打包,可以不加 } } } @closedir($path); } / 删除文件函数 @param [string] $dir [文件目录] @param boolean $delDir [是否删除目录] @return [type] [description] / protected function delDirAndFile($path,$delDir=true){ $handle=opendir($path); if($handle){ while(false!==($item = readdir($handle))){ if($item!=\"大众.\"大众&&$item!=\公众..\公众){ if(is_dir($path.'/'.$item)){ $this->delDirAndFile($path.'/'.$item, $delDir); }else{ unlink($path.'/'.$item); } } } @closedir($handle); if($delDir){return rmdir($path);} }else{ if(file_exists($path)){ return unlink($path); }else{ return FALSE; } } }}

标签:

相关文章

介绍百度网盘,云端存储时代的创新先锋

随着互联网技术的飞速发展,云计算已经成为现代生活不可或缺的一部分。而在这其中,百度网盘作为国内领先的云存储服务提供商,以其卓越的性...

SEO优化 2025-01-03 阅读3 评论0

介绍监控屏蔽技术,守护个人隐私的利器

随着科技的发展,监控设备已经深入到我们生活的方方面面。在享受便利的隐私安全问题也日益凸显。如何有效屏蔽监控,保护个人隐私,成为人们...

SEO优化 2025-01-03 阅读3 评论0

介绍番号观看方法,轻松驾驭影视世界

随着互联网的普及,网络影视资源日益丰富,番号作为影视作品的标识码,已经成为广大观众了解、搜索和观看影视作品的重要途径。如何正确地使...

SEO优化 2025-01-03 阅读1 评论0

介绍盗微信号黑幕,网络安全的严峻挑战

在数字化时代,微信已成为人们生活中不可或缺的通讯工具。随着微信用户数量的激增,盗微信号的事件也日益增多。本文将深入剖析盗微信号的方...

SEO优化 2025-01-03 阅读1 评论0