当前位置:  编程技术>php

PHP支持断点续传的下载代码

    来源: 互联网  发布时间:2014-10-08

    本文导语:  让PHP下载代码支持断点续传 主要靠的 HTTP协议中header Content-Range来实现。 一,HTTP的下载原理 对于HTTP协议,向服务器请求某个文件时,只要发送类似如下的请求即可: GET /Path/FileName HTTP/1.0 Host: www.server.com:80 Accept: **表示接收...

让PHP下载代码支持断点续传 主要靠的 HTTP协议中header Content-Range来实现。

一,HTTP的下载原理
对于HTTP协议,向服务器请求某个文件时,只要发送类似如下的请求即可:
GET /Path/FileName HTTP/1.0
Host: www.server.com:80
Accept: **表示接收任何类型的数据。User-Agent表示用户代理,这个字段可有可无,但强烈建议加上,因为它是服务器统计、追踪以及识别客户端的依据。Connection字段中的close表示使用非持久连接。

关于HTTP协议更多的细节可以参考RFC2616(HTTP 1.1)。
如果服务器成功收到该请求,并且没有出现任何错误,则会返回类似下面的数据:
HTTP/1.0 200 OK
Content-Length: 13057672
Content-Type: application/octet-stream
Last-Modified: Wed, 10 Oct 2005 00:56:34 GMT
Accept-Ranges: bytes
ETag: "2f38a6cac7cec51:160c"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Wed, 16 Nov 2005 01:57:54 GMT
Connection: close

这些返回信息的含义。

第一行是协议名称及版本号,空格后面会有一个三位数的数字,是HTTP协议的响应状态码,200表示成功,OK是对状态码的简短文字描述。状态码共有5类:
1xx属于通知类;
2xx属于成功类;
3xx属于重定向类;
4xx属于客户端错误类;
5xx属于服务端错误类。

对 于状态码,相信大家对404应该很熟悉,如果向一个服务器请求一个不存在的文件,就会得到该错误,通常浏览器也会显示类似“HTTP 404 – 未找到文件”这样的错误。Content-Length字段是一个比较重要的字段,它标明了服务器返回数据的长度,这个长度是不包含HTTP头长度的。换句话说,我们的请求中并没有Range字段(后面会说到),表示我们请求的是整个文件,所以Content-Length就是整个文件的大小。其余各字段是一些关于文件和服务器的属性信息。
以上就是通过HTTP协议实现文件下载的全过程。但还不能实现断点续传,而实际上断点续传的实现非常简单,只要在请求中加一个Range字段就可以了。
假如一个文件有1000个字节,那么其范围就是0-999,则:
Range: bytes=500- 表示读取该文件的500-999字节,共500字节。
Range: bytes=500-599 表示读取该文件的500-599字节,共100字节。
Range还有其它几种写法,但上面这两种是最常用的,对于断点续传也足矣了。如果HTTP请求中包含Range字段,那么服务器会返回206(Partial Content),同时HTTP头中也会有一个相应的Content-Range字段,类似下面的格式:
Content-Range: bytes 500-999/1000
Content-Range字段说明服务器返回了文件的某个范围及文件的总长度。这时Content-Length字段就不是整个文件的大小了,而是对应文件这个范围的字节数,这一点一定要注意。

PHP对断点续传支持的演示:
先定义一个函数 getRange() 这个函数用来处理 header中 Range 具体数据的处理
 

代码示例:

    
 
 

您可能感兴趣的文章:

  • php断点续传下载示例代码
  • php断点续传分割合并文件实例代码
  • php断点续传之如何分割合并文件
  • PHP使用range协议实现输出文件断点续传代码实例
  • php大文件下载代码(支持断点续传)
  • php支持断点续传的文件下载类(附源码)
  • 关于php支持分块与断点续传文件下载功能代码
  • php通过socket_bind()设置IP地址代码示例
  • PHP代码格式化 php.fmt
  • PHP去除html标签,php标记及css样式代码参考
  • php质数算法代码 php除法求质数
  • php session_id()函数介绍及代码实例
  • PHP获取php,mysql,apche的版本信息示例代码
  • php将html特殊字符转换成html字符串的函数:htmlspecialchars()介绍及代码举例
  • php判断字符串是否存在 php字符串检测代码
  • php实现socket实现客户端和服务端数据通信源代码
  • php 质数计算代码 PHP筛选法求质数
  • php获取访客ip地址原理及提供七段代码供参考
  • php解压文件代码实现php在线解压
  • php微博短网址算法 php生成短网址的实现代码
  • PHP 代码加密工具 HCache
  • php递归示例 php递归函数代码
  • 我已经用源代码方式安装了apache,如何让它支持php和mysql(php没有安装,mysql安装的是rpm包),要不要重新安装apache?如何删除已有的ap
  • 执行PHP代码的虚拟机 HHVM
  • centos服务器定时执行一段php代码
  • PHP代码编辑环境 PHPanywhere
  • PHP 强制下载文件示例代码
  • php获取字段名的代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • nginx服务器下通过fastcgi支持php5详细安装配置步骤
  • 安装好的Redhat Linux 8.0,带Apache和php支持,安装上Mysql后,运行正常,但检测提示php不支持Mysql,如何解决?
  • php for linux安装既不支持mysql.如何配置支持mysql
  • 原来在ubuntu装个了个eclipse,可以正常启动,后来又下了个支持php的eclipse...发现php的eclipse无法启动
  • php怎么开启CURL支持?
  • linux平台下面,能同时支持php,asp吗,如果可以,能不能详细指点。 在线等候!
  • 支持Java/PHP的PaaS Jelastic
  • php检测iis环境是否支持htaccess的方法
  • 红旗不提供技术支持,如何升级php
  • PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
  • PHP中file_exists函数不支持中文名的解决方法
  • php文件下载代码(多浏览器兼容、支持中文文件名)
  • php中file_exists函数不支持中文名怎么办?
  • php mb_chunk_split函数支持宽字符分割
  • php实现文件下载、支持中文文件名的示例代码
  • IIS环境下PHP rewrite重写设置(支持中文参数)
  • Linux下开启PHP GD库支持
  • 支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
  • php实现文件下载(支持中文文名)
  • php获取网卡的MAC地址支持WIN/LINUX系统
  • php如何获取网卡MAC地址(支持WIN与LINUX系统)
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP 框架 Pop php
  • php安装完成后如何添加mysql扩展
  • PHP的JavaScript框架 PHP.JS




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3