浅析PHP文件下载原理

1、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”);

(0)

相关推荐

  • php控制文件下载速度的方法

    本文实例讲述了php控制文件下载速度的方法.分享给大家供大家参考.具体实现方法如下: <?php /* * set here a limit of downloading rate (e.g. 10.20 Kb/s) */ $download_rate = 10.20; $download_file = 'download-file.zip'; $target_file = 'target-file.zip'; if(file_exists($download_file)){ /* header

  • php获取CSS文件中图片地址并下载到本地的方法

    本文实例讲述了php获取CSS文件中图片地址并下载到本地的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: /**  * 获取CSS中图片地址,并且保存到本地  */ class getInCssImage {            /**           *  图片保存下来          * @param $cssUrl css的url地址          * @param $dir 保存图片的目录          * @return void        

  • 跨浏览器PHP下载文件名中的中文乱码问题解决方法

    本文实例讲述了跨浏览器PHP下载文件名中的中文乱码问题解决方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20",

  • php实现下载限制速度示例分享

    复制代码 代码如下: // local file that should be send to the client$local_file = 'test-file.zip'; // filename that the user gets as default$download_file = 'your-download-name.zip'; // set the download rate limit (=> 20,5 kb/s)$download_rate = 20.5; if(file_e

  • PHP实现从远程下载文件的方法

    本文实例讲述了PHP实现从远程下载文件的方法.分享给大家供大家参考.具体实现方法如下: <?php if ($_GET[xfer]) { if ($_POST[from] == "") { print "You forgot to enter a url."; } else { copy("$_POST[from]", "$_POST[to]"); $size = round((filesize($_POST[to])/

  • php实现简单文件下载的方法

    本文实例讲述了php实现简单文件下载的方法.分享给大家供大家参考.具体如下: 这里介绍的php文件下载代码,只是简单实现了一张图片的下载功能,还不完善,最好是封装到一个类里,或是采用函数调用.感兴趣的朋友可以在此基础上加以完善! php文件下载代码如下: <?php $file_name = "2.jpg";//需要下载的图片 define("SPATH","/php/image/");//存放图片的相对路径 $file_sub_path

  • PHP下载远程文件到本地存储的方法

    本文实例讲述了PHP下载远程文件到本地存储的方法.分享给大家供大家参考.具体实现方法如下: <?php function GrabImage($url,$filename="") { if($url=="") return false; if($filename=="") { $ext=strrchr($url,"."); if($ext!=".gif" && $ext!="

  • 浅析PHP文件下载原理

    1.php下载原理图 2.文件下载源码: 复制代码 代码如下: <?php $file_name="哈哈.jpg";//需要下载的文件 $file_name=iconv("utf-8","gb2312","$file_name"); $fp=fopen($file_name,"r+");//下载文件必须先要将文件打开,写入内存 if(!file_exists($file_name)){//判断文件是否

  • 浅析JSONP技术原理及实现

    跨域问题一直是前端中常见的问题,每当说到跨域,第一浮现的技术必然就是JSONP JSONP在我的理解,它并不是ajax,它是在文档中插入一个script标签,创建_callback方法,通过服务器配合执行_callback方法,并传入一些参数 JSONP的局限就在于,因为是通过插入script标签,所以参数只能通过url传入,因此只能满足get请求,特别jQuery的ajax方法时,即使设置type: 'POST',但是只要设置了dataType: 'jsonp',在请求时,都会自动使用GET请

  • Python接口自动化浅析unittest单元测试原理

    目录 一.单元测试三连问 1.什么是单元测试? 2.为什么要做单元测试? 3.怎么做单元测试? 二.unittest模块说明 1.unittest简介 2.unittest组成 1.TestCase(测试用例): 2.TestSuite(测试套件): 3.TestLoader(测试用例加载器): 4.TextTestRunner(执行测试用例): 5.Test Fixture(测试环境数据准备和清理): 3.unittest核心工作原理 三.unittest单元测试 1.实现思路 2.使用介绍

  • Python接口自动化浅析logging日志原理及模块操作流程

    目录 一.日志介绍 01 为什么需要日志? 02 什么是日志? 03 日志的用途是什么? 04 日志的级别分为哪些? 05 日志功能的实现 二.Logging模块 01 logging模块介绍 02 logging模块优势 03 logging日志框架的组成 04 logging函数中的具体参数 05 简单的日志小例子 06 自定义logger日志 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析pymysql数据库操作流程,主要介绍pymysql安装.操作流程.语法基础及

  • Python接口自动化浅析yaml配置文件原理及用法

    目录 一.yaml介绍及使用 01 yaml简介 02 yaml语法规则 03 yaml数据结构 对象 数组 纯量 二.yaml配置文件的使用 01 yaml配置文件准备 02 yaml配置文件格式校验 三.yaml配置文件读写 01 安装pyYaml 02 yaml模块源码解析 load: dump: 03 读写yaml配置文件 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析数据驱动原理,主要介绍openpyxl操作excel,结合ddt实现数据驱动. 在自动化过程中,

  • 浅析NFS服务器原理以及搭建配置部署步骤

    目录 NFS服务简介 什么是NFS? NFS挂载原理 NFS服务器到底使用哪个端口来进行数据传输呢? RPC与NFS通讯原理 那么RPC又是如何知道每个NFS功能的端口呢? NFS客户端和NFS服务器通讯过程 Linux下NFS服务器部署 NFS服务所需软件及主要配置文件 RPC主程序:rpcbind NFS主程序:nfs-utils NFS的相关文件 服务端安装NFS服务步骤 第一步:安装NFS和rpc 第二步:启动服务和设置开启启动 第三步:配置共享文件目录,编辑配置文件 NFS客户端挂载配

  • JS前端攻坚浅析instanceof实现原理

    目录 正文 instanceof的实现 正文 无论是平时开发还是学习中,对于类型的判断总是非常的重要,常见的类型判断方法有很多,对于每种比较常用的api我们需要对其进行一定的了解,才能更好的判断其中的实现方法,对Js的了解程度才能更深,这篇文章带大家了解一下instanceof的实现 instanceof的实现 instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上(来自MDN) 我们先来看下instanceof的用法,有点类似于对于一个父类,生

  • Python接口自动化浅析Token应用原理

    目录 一.Token基本概念及原理 1.Token作用 2.什么是Token 3.Token运行原理 4.Token认证优点 5.Token和 Cookie.Session 的选型 二.Token实战 在之前的Python接口自动化测试系列文章:Python接口自动化之cookie.session应用详解,介绍了cookie.session原理及在自动化过程中如何利用cookie.session保持会话状态. 以下介绍Token原理及在自动化中的应用. 一.Token基本概念及原理 1.Toke

  • 浅析Ajax的 原理及优缺点

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax的流行.而这也让微软感到无比的尴尬,因为早在97年,微软便已经发明了ajax中的关键技术,并且在99年IE5推出之时,它便开始支持XmlHttpRequest对象,并且微软之前已经开始在它的一些产品中应用ajax,比如说MSDN网站菜单中的一些应用.遗憾的是,不知道出于什么想法,当时微软发明了aja

  • 浅析vue-router实现原理及两种模式

    之前用Vue开发单页应用,发现不管路由怎么变化,浏览器地址栏总是会有一个'#'号. 当时检查自己的代码,没有发现请求的地址带'#',当时也很纳闷,但是由于没有影响页面的渲染以及向后台发送请求,当时也没有在意.最近看了一下vue-router的实现原理,才逐渐揭开了这个谜题. vue-router 的两种方式(浏览器环境下) 1. Hash (对应HashHistory) hash("#")符号的本来作用是加在URL中指示网页中的位置: http://www.example.com/in

随机推荐