• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

摘自织梦CMS的HTTP文件下载类_php实例

php 搞代码 3年前 (2022-01-25) 25次浏览 已收录 0个评论

本文实例讲述了摘自织梦CMS的HTTP文件下载类。分享给大家供大家参考。具体如下:

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;   }   $this->HomeUrl = $urls["host"];   $this->BaseUrlPath = $this->HomeUrl.$urls["path"];   $this->BaseUrlPath = preg_replace("/\/([^\/]*)\.(.*)$/","/",$this->BaseUrlPath);   $this->BaseUrlPath = preg_replace("/\/$/","",$this->BaseUrlPath);  } } /**  * 重设各参数  *  * @access public  * @return void  */ function ResetAny() {  $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 = ""; } /**  * 打开指定网址  *  * @access public  * @param  string $url 地址  * @param  string $requestType 请求类型  * @return string  */ function OpenUrl($url,$requestType="GET") {  $this->ResetAny();  $this->JumpCount = 0;  $this->m_httphead = Array() ;  $this->m_html = '';  $this->reTry = 0;  $this->Close();  //初始化系统  $this->PrivateInit($url);  $this->PrivateStartSession($requestType); } /**  * 转到303重定向网址  *  * @access public  * @param  string $url 地址  * @return string  */ function JumpOpenUrl($url) {  $this->ResetAny();  $this->JumpCount++;  $this->m_httphead = Array() ;  $this->m_html = "";  $this->Close();  //初始化系统  $this->PrivateInit($url);  $this->PrivateStartSession('GET'); } /**  * 获得某操作错误的原因  *  * @access public  * @return void  */ function printError() {  echo "错误信息:".$this->m_error;  echo "<br />具体返回头:<br />";  foreach($this->m_httphead as $k=>$v){ echo "$k => $v <br />\r\n"; } } /**  * 判别用Get方法发送的头的应答结果是否正确  *  * @access public  * @return bool  */ function IsGetOK() {  if( preg_match("/^2/",$this->GetHead("http-state")) )  {   return TRUE;  }  else  {   $this->m_error .= $this->GetHead("http-state")." - <strong style="color:transparent">来2源gaodaima#com搞(代@码&网</strong><label>搞gaodaima代码</label>".$this->GetHead("http-describe")."<br />";   return FALSE;  } } /**  * 看看返回的网页是否是text类型  *  * @access public  * @return bool  */ function IsText() {  if( preg_match("/^2/",$this->GetHead("http-state")) && preg_match("/text|xml/i",$this->GetHead("content-type")) )  {   return TRUE;  }  else  {   $this->m_error .= "内容为非文本类型或网址重定向<br />";   return FALSE;  } } /**  * 判断返回的网页是否是特定的类型  *  * @access public  * @param  string $ctype 内容类型  * @return string  */ function IsContentType($ctype) {  if(preg_match("/^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协议下载文件  *  * @access public  * @param  string $savefilename 保存文件名称  * @return string  */ function SaveToBin($savefilename) {  if(!$this->IsGetOK())  {   return FALSE;  }  if(@feof($this->m_fp))  {   $this->m_error = "连接已经关闭!"; return FALSE;  }  $fp = fopen($savefilename,"w");  while(!feof($this->m_fp))  {   fwrite($fp, fread($this->m_fp, 1024));  }  fclose($this->m_fp);  fclose($fp);  return TRUE; } /**  * 保存网页内容为Text文件  *  * @access public  * @param  string $savefilename 保存文件名称  * @return string  */ function SaveToText($savefilename) {  if($this->IsText())  {   $this->SaveBinFile($savefilename);  }  else  {   return "";  } } /**  * 用Http协议获得一个网页的内容  *  * @access public  * @return string  */ 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会话  *  * @access public  * @param  string $requestType 请求类型  * @return string  */ function PrivateStartSession($requestType="GET") {  if(!$this->PrivateOpenHost())  {   $this->m_error .= "打开远程主机出错!";   return FALSE;  }  $this->reTry++;  if($this->GetHead("http-edition")=="HTTP/1.1")  {   $httpv = "HTTP/1.1";  }  else  {   $httpv = "HTTP/1.0";  }  $ps = explode('?',$this->m_urlpath);  $headString = '';  //发送固定的起始请求头GET、Host信息  if($requestType=="GET")  {   $headString .= "GET ".$this->m_urlpath." $httpv\r\n";  }  else  {   $headString .= "POST ".$ps[0]." $httpv\r\n";  }  $this->m_puthead["Host"] = $this->m_host;  //发送用户自定义的请求头  if(!isset($this->m_puthead["Accept"]))  {   $this->m_puthead["Accept"] = "*/*";  }  if(!isset($this->m_puthead["User-Agent"]))  {   $this->m_puthead["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)";  }  if(!isset($this->m_puthead["Refer"]))  {   $this->m_puthead["Refer"] = "http://".$this->m_puthead["Host"];  }  foreach($this->m_puthead as $k=>$v)  {   $k = trim($k);   $v = trim($v);   if($k!=""&&$v!="")   {    $headString .= "$k: $v\r\n";   }  }  fputs($this->m_fp, $headString);  if($requestType=="POST")  {   $postdata = "";   if(count($ps)>1)   {    for($i=1;$im_fp,"Content-Type: application/x-www-form-urlencoded\r\n");   fputs($this->m_fp,"Content-Length: $plen\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");  }  if($requestType=="POST")  {   fputs($this->m_fp,$postdata);  }  //获取应答头状态信息  $httpstas = explode(" ",fgets($this->m_fp,256));  $this->m_httphead["http-edition"] = trim($httpstas[0]);  $this->m_httphead["http-state"] = trim($httpstas[1]);  $this->m_httphead["http-describe"] = "";  for($i=2;$im_httphead["http-describe"] .= " ".trim($httpstas[$i]);  }  //获取详细应答头  while(!feof($this->m_fp))  {   $line = trim(fgets($this->m_fp,256));   if($line == "")   {    break;   }   $hkey = "";   $hvalue = "";   $v = 0;   for($i=0;$im_httphead[strtolower($hkey)] = trim($hvalue);   }  }  //如果连接被不正常关闭,重试  if(feof($this->m_fp))  {   if($this->reTry > 10)   {    return FALSE;   }   $this->PrivateStartSession($requestType);  }  //判断是否是3xx开头的应答  if(preg_match("/^3/",$this->m_httphead["http-state"]))  {   if($this->JumpCount > 3)   {    return;   }   if(isset($this->m_httphead["location"]))   {    $newurl = $this->m_httphead["location"];    if(preg_match("/^http/i",$newurl))    {     $this->JumpOpenUrl($newurl);    }    else    {     $newurl = $this->FillUrl($newurl);     $this->JumpOpenUrl($newurl);    }   }   else   {    $this->m_error = "无法识别的答复!";   }  } } /**  * 获得一个Http头的值  *  * @access public  * @param  string $headname 头文件名称  * @return string  */ function GetHead($headname) {  $headname = strtolower($headname);  return isset($this->m_httphead[$headname]) ? $this->m_httphead[$headname] : ''; } /**  * 设置Http头的值  *  * @access public  * @param  string $skey 键  * @param  string $svalue 值  * @return string  */ function SetHead($skey,$svalue) {  $this->m_puthead[$skey] = $svalue; } /**  * 打开连接  *  * @access public  * @return bool  */ function PrivateOpenHost() {  if($this->m_host=="")  {   return FALSE;  }  $errno = "";  $errstr = "";  $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;  } } /**  * 关闭连接  *  * @access public  * @return void  */ function Close() {  @fclose($this->m_fp); } /**  * 补全相对网址  *  * @access public  * @param  string $surl 需要不全的地址  * @return string  */ function FillUrl($surl) {  $i = 0;  $dstr = "";  $pstr = "";  $okurl = "";  $pathStep = 0;  $surl = trim($surl);  if($surl=="")  {   return "";  }  $pos = strpos($surl,"#");  if($pos>0)  {   $surl = substr($surl,0,$pos);  }  if($surl[0]=="/")  {   $okurl = "http://".$this->HomeUrl.$surl;  }  else if($surl[0]==".")  {   if(strlen($surl)BaseUrlPath."/".substr($surl,2,strlen($surl)-2);   }   else   {    $urls = explode("/",$surl);    foreach($urls as $u)    {     if($u=="..")     {      $pathStep++;     }     else if($iBaseUrlPath);    if(count($urls) <= $pathStep)    {     return "";    }    else    {     $pstr = "http://";     for($i=0;$i<count($urls)-$pathStep;$i++)     {      $pstr .= $urls[$i]."/";     }     $okurl = $pstr.$dstr;    }   }  }  else  {   if(strlen($surl)BaseUrlPath."/".$surl;   }   else if(strtolower(substr($surl,0,7))=="http://")   {    $okurl = $surl;   }   else   {    $okurl = "http://".$this->BaseUrlPath."/".$surl;   }  }  $okurl = preg_replace("/^(http:\/\/)/i","",$okurl);  $okurl = preg_replace("/\/{1,}/", "/", $okurl);  return "http://".$okurl; }}//End Class

希望本文所述对大家的php程序设计有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:摘自织梦CMS的HTTP文件下载类_php实例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址