当前位置: 首页 > news >正文

PHP -- 文件下载

1、 简单的文件下载:

 1 <?php
 2 
 3   
 4   function file_dowload()
 5   {
 6     $file_name="滑稽.jpg";
 7     $file_name=iconv("utf-8","gb2312",$file_name);
 8     
 9     if(!file_exists($file_name))
10     { 
11         echo "文件不存在";
12         return ;
13     }
14     $fp=fopen($file_name,"r");
15     $file_size=filesize($file_name);//文件大小
16     
17     # header 部分开始 (写错的话会下载源代码文件)
18     
19     #返回的文件
20     header("Content-type: application/octet-stream");
21     //按文件大小返回
22     header("Accept-Ranges:bytes");
23     #返回文件大小
24     header("Accept-Length:$file_size");
25     //客户端对话框的文件名
26     header("Content-Disposition:attachment; filename=".$file_name);
27     
28     # header 部分结束
29   
30   
31     //向客户端回送数据
32     $buffer=1024;
33     $file_count=0;
34     //判断文件是否结束
35     while(!feof($fp)&& ($file_size-$file_count>0))
36     {
37         //依次读取每次1024字节的数据
38         $file_data=fread($fp,$buffer);
39         //统计读了多少个字节
40         $file_count+=$buffer;
41         //把部分数据传回给浏览器
42         echo $file_data;
43     }
44     //关闭文件
45     fclose($fp);    
46   }
47   file_dowload();
48   
49    //调试需要
50     //echo "<script language='javascript'>window.alert('".$file_size."')</script>";
51     //return;
52 ?>

 改进后:

 1 <?php
 2 
 3   
 4   function file_dowload($file_name,$file_sub_dir)
 5   {
 6       
 7       # ************************* 基本数据判断部分开始
 8       
 9     $file_name=iconv("utf-8","gb2312",$file_name);
10     $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name; //$_SERVER['DOCUMENT_ROOT']获得绝对路径
11     
12     if(!file_exists($file_path))
13     { 
14         echo "文件不存在";
15         return ;
16     }
17     $fp=fopen($file_path,"r");
18     $file_size=filesize($file_path);//文件大小
19     if($file_size>4417){
20         echo "<script language='javascript'>window.alert('".$file_size."')</script>";
21         return ;
22     }
23     
24     # ************************* 基本数据判断部分
25     
26     
27     #************************* header 部分开始 (写错的话会下载源代码文件)
28     
29     //返回的文件
30     header("Content-type: application/octet-stream");
31     //按文件大小返回
32     header("Accept-Ranges:bytes");
33     #返回文件大小
34     header("Accept-Length:$file_size");
35     //客户端对话框的文件名
36     header("Content-Disposition:attachment; filename=".$file_name);
37     
38     #************************* header 部分结束
39   
40   
41     #************************* 向客户端回送数据开始
42     
43     ob_clean();
44     readfile($file_path);
45     
46     //关闭文件
47     fclose($fp);    
48     
49     #************************* 向客户端回送数据结束
50   }
51   
52   #************************* 启动调用
53   file_dowload("不不不1.JPG","/images/");
54   
55    //调试需要
56     //echo "<script language='javascript'>window.alert('".$file_size."')</script>";
57     //return;
58 ?>

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/daomul/p/3374070.html

相关文章:

  • Hadoop集群部署模型纵览2
  • 【转】jQuery选择器大全
  • centos的用户、组权限、添加删除用户等操作的详细操作命令
  • 按需加载的实现方法
  • OpenCV学习-——OpenCV永久配置(win7 64位+VS2012+OpenCV 2.4.6)
  • [World Wind学习]22.相机高度和瓦片等级计算
  • 修改apache+php上传文件大小限制
  • paip.mysql 性能测试 报告 home right
  • 我的2013校招总结
  • C语言函数可变长度参数剖析
  • 当本机通过代理服务器上网时,本机无法打开在本机上的虚拟机(oracle vm)linux系统上的网站,但是局域网里的其他机器却可以打开...
  • API编程基本控件使用
  • SCOM 常识概念—图标状态/维护模式
  • 学习电商路线
  • SDL2.0上手试用
  • 230. Kth Smallest Element in a BST
  • Android 控件背景颜色处理
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • create-react-app项目添加less配置
  • Java基本数据类型之Number
  • JS 面试题总结
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • MaxCompute访问TableStore(OTS) 数据
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PHP的类修饰符与访问修饰符
  • Python十分钟制作属于你自己的个性logo
  • 和 || 运算
  • 简单数学运算程序(不定期更新)
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 移动端唤起键盘时取消position:fixed定位
  • 译米田引理
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • (4)(4.6) Triducer
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (转载)虚函数剖析
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET分布式缓存Memcached从入门到实战
  • .NET企业级应用架构设计系列之开场白
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • [ACTF2020 新生赛]Upload 1
  • [Avalon] Avalon中的Conditional Formatting.
  • [bzoj4240] 有趣的家庭菜园
  • [Design Pattern] 工厂方法模式
  • [DevEpxress]GridControl 显示Gif动画
  • [Django ]Django 的数据库操作
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备
  • [JavaWeb学习] tomcat简介、安装及项目部署
  • [Latex学习笔记]数学公式基本命令