≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > PHP笔记

PHP 支持断点续传人远程文件类的用法

人气:603 时间:2018-09-18

这篇文章主要为大家详细介绍了PHP 支持断点续传人远程文件类的用法,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编罗X来看看吧。
经测试代码如下:

/**
 * 支持断点续传人远程文件类
 *
 * @param 
 * @author 四海网 www.q1010.com
 **/
class HttpDownload {
 private $m_url = "";
  private $m_urlpath = "";
  private $m_scheme = "http";
  private $m_host = "";
  private $m_port = "80";
  private $m_user = "";
  private $m_pass = "";
  private $m_path = "/";
  private $m_query = "";
  private $m_fp = "";
  private $m_error = "";
 private $m_httphead = "" ;
 private $m_html = "";
 
 /**
  * 初始化 
  */
 public function PrivateInit($url){
  $urls = "";
  $urls = @parse_url($url);
  $this->m_url = $url;
  if(is_array($urls)) {
   $this->m_host = $urls["host"];
   if(!empty($urls["scheme"])) $this->m_scheme = $urls["scheme"];
   if(!empty($urls["user"])) $this->m_user = $urls["user"];
      if(!empty($urls["pass"])) $this->m_pass = $urls["pass"];
      if(!empty($urls["port"])) $this->m_port = $urls["port"];
      if(!empty($urls["path"])) $this->m_path = $urls["path"];
      $this->m_urlpath = $this->m_path;
   if(!empty($urls["query"])) {
        $this->m_query = $urls["query"];
        $this->m_urlpath .= "?".$this->m_query;
       }
    }
 }
 
 /**
 * 打开指定网址
 */
 function OpenUrl($url) {
  #重设各参数
  $this->m_url = "";
  $this->m_urlpath = "";
  $this->m_scheme = "http";
  $this->m_host = "";
  $this->m_port = "80";
  $this->m_user = "";
  $this->m_pass = "";
  $this->m_path = "/";
  $this->m_query = "";
  $this->m_error = "";
  $this->m_httphead = "" ;
  $this->m_html = "";
  $this->Close();
  #初始化系统
  $this->PrivateInit($url);
  $this->PrivateStartSession();
 }
 /**
 * 获得某操作错误的原因
 */
 public function printError() {
  echo "错误信息:".$this->m_error;
  echo "具体返回头:<br>";
  foreach($this->m_httphead as $k=>$v) { 
   echo "$k => $v <br>\r\n"; 
  }
 }
 
 /**
 * 判别用Get方法发送的头的应答结果是否正确
 */
 public function IsGetOK() {
  if( ereg("^2",$this->GetHead("http-state")) ) { 
   return true; 
  } else {
   $this->m_error .= $this->GetHead("http-state")." - ".$this->GetHead("http-describe")."<br>";
   return false;
  }
 }
 
 /**
 * 看看返回的网页是否是text类型
 */
 public function IsText() {
  if (ereg("^2",$this->GetHead("http-state")) && eregi("^text",$this->GetHead("content-type"))) { 
   return true; 
  } else {
   $this->m_error .= "内容为非文本类型<br>";
   return false;
  }
 }
 /**
 * 判断返回的网页是否是特定的类型
 */
 public function IsContentType($ctype) {
  if (ereg("^2",$this->GetHead("http-state")) && $this->GetHead("content-type") == strtolower($ctype)) { 
   return true; 
  } else {
   $this->m_error .= "类型不对 ".$this->GetHead("content-type")."<br>";
   return false;
  }
 }
 
 /**
 * 用 HTTP 协议下载文件
 */
 public function SaveToBin($savefilename) {
  if (!$this->IsGetOK()) return false;
  if (@feof($this->m_fp)) { 
   $this->m_error = "连接已经关闭!"; 
   return false; 
  }
  $fp = fopen($savefilename,"w") or die("写入文件 $savefilename 失败!");
  while (!feof($this->m_fp)) {
   @fwrite($fp,fgets($this->m_fp,256));
  }
  @fclose($this->m_fp);
  return true;
 }
 
 /**
 * 保存网页内容为 Text 文件
 */
 public function SaveToText($savefilename) {
  if ($this->IsText()) {
   $this->SaveBinFile($savefilename);
  } else {
   return "";
  }
 }
 
 /**
 * 用 HTTP 协议获得一个网页的内容
 */
 public function GetHtml() {
  if (!$this->IsText()) return "";
  if ($this->m_html!="") return $this->m_html;
  if (!$this->m_fp||@feof($this->m_fp)) return "";
  while(!feof($this->m_fp)) {
   $this->m_html .= fgets($this->m_fp,256);
  }
  @fclose($this->m_fp);
  return $this->m_html;
 }
 
 /**
 * 开始 HTTP 会话
 */
 public function PrivateStartSession() {
  if (!$this->PrivateOpenHost()) {
   $this->m_error .= "打开远程主机出错!";
   return false;
  }
  if ($this->GetHead("http-edition")=="HTTP/1.1") {
   $httpv = "HTTP/1.1";
  } else {
   $httpv = "HTTP/1.0";
  }
  fputs($this->m_fp,"GET ".$this->m_urlpath." $httpv\r\n");
  fputs($this->m_fp,"Host: ".$this->m_host."\r\n");
  fputs($this->m_fp,"Accept: */*\r\n");
  fputs($this->m_fp,"User-Agent: Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2)\r\n");
  #HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束
  if ($httpv=="HTTP/1.1") {
   fputs($this->m_fp,"Connection: Close\r\n\r\n");
  } else {
   fputs($this->m_fp,"\r\n");
  }
  $httpstas = fgets($this->m_fp,256);
  $httpstas = split(" ",$httpstas);
  $this->m_httphead["http-edition"] = trim($httpstas[0]);
  $this->m_httphead["http-state"] = trim($httpstas[1]);
  $this->m_httphead["http-describe"] = "";
  for ($i=2;$i<count($httpstas);$i++) {
   $this->m_httphead["http-describe"] .= " ".trim($httpstas[$i]);
  }
  while (!feof($this->m_fp)) {
   $line = str_replace("\"","",trim(fgets($this->m_fp,256)));
   if($line == "") break;
   if (ereg(":",$line)) {
    $lines = split(":",$line);
    $this->m_httphead[strtolower(trim($lines[0]))] = trim($lines[1]);
   }
  }
 }
 
 /**
 * 获得一个Http头的值
 */
 public function GetHead($headname) {
  $headname = strtolower($headname);
  if (isset($this->m_httphead[$headname])) {
   return $this->m_httphead[$headname];
  } else {
   return "";
  }
 }
 
 /**
 * 打开连接
 */
 public function PrivateOpenHost() {
  if ($this->m_host=="") return false;
  $this->m_fp = @fsockopen($this->m_host, $this->m_port, &$errno, &$errstr,10);
  if (!$this->m_fp){
   $this->m_error = $errstr;
   return false;
  } else {
   return true;
  }
 }
 
 /**
 * 关闭连接
 */
 public function Close(){
  @fclose($this->m_fp);
 }
}
#两种使用方法,分别如下:
#打开网页
$httpdown = new HttpDownload();
$httpdown->OpenUrl("http://www.q1010.com");
echo $httpdown->GetHtml();
$httpdown->Close();

#下载文件
$file = new HttpDownload(); # 实例化类
$file->OpenUrl("http://www.danbaise.com/cn/lit/an/rust020/rust020.pdf"); # 远程文件地址
$file->SaveToBin("rust020.pdf"); # 保存路径及文件名
$file->Close(); # 释放资源

/***   代码来自四海网(www.q1010.com)   ***/

本文来自:http://www.q1010.com/173/235-0.html

注:关于PHP 支持断点续传人远程文件类的用法的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:断点续传,远程文件

您可能感兴趣的文章

  • php 使用CURL下载远程HTML文件的简单示例
  • PHP 读取远程文件的简单示例
上一篇:php 反缓存头部信息的简单示例
下一篇:php 路由URI入门实例
热门文章
  • PHP 写入WRITE编码为UTF8的文件示例
  • PHP 中文字符串截取函数示例:支持gb2312,gbk,big
  • PHP 简单留言板的制作示例
  • 解决Fatal error: Call to undefined function mb_convert_encoding() in错误问题
  • PHP语言基础(标记、注释、变量、数组、常量、函数)示例
  • php 生成迅雷链接的简单示例
  • php 获取短网址的实现方法
  • PHP 通用分页类的简单示例
  • PHP 使用文件方式导入导出整个MYSQL数据库的实现方法
  • php 获取MYSQL错误的简单示例
  • 最新文章
    • 解决PHP使用redis实现统计缓存MySQL压力的问题
    • php 简单的上传进度条的简单示例
    • php 给html中引用的js和css路径打上版本号的实现方法
    • php 实现计算年龄精准到年月日的实例
    • php+ajax无刷新分页的简单示例
    • 解决php+ajax无刷新上传图片的问题
    • 解决PHP生成HTML静态页面的问题
    • 解决PHP使用uniqid函数生成唯一ID的问题
    • 解决PHP防刷票的一些问题
    • 微信access_token的获取开发的实现方法

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。