千家信息网

如何实现摘自织梦CMS的HTTP文件下载类

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容主要讲解"如何实现摘自织梦CMS的HTTP文件下载类",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何实现摘自织梦CMS的HTTP文件下载类"吧!
千家信息网最后更新 2025年01月31日如何实现摘自织梦CMS的HTTP文件下载类

本篇内容主要讲解"如何实现摘自织梦CMS的HTTP文件下载类",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何实现摘自织梦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 "
具体返回头:
"; foreach($this->m_httphead as $k=>$v){ echo "$k => $v
\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")." - ".$this->GetHead("http-describe")."
"; 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 .= "内容为非文本类型或网址重定向
"; 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")."
"; 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)<=1) { return ""; } else if($surl[1]=="/") { $okurl = "http://".$this->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;$iBaseUrlPath."/".$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

到此,相信大家对"如何实现摘自织梦CMS的HTTP文件下载类"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文件 类型 内容 网址 网页 文件下载 信息 名称 地址 文档 方法 系统 错误 学习 不对 实用 更深 主机 兴趣 原因 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器插上u盘后就启动不起来 我的世界mite服务器怎么创建 蓝牙协议栈软件开发工程师 国内外电子商务网络安全研究现状 steam怎么买方舟服务器 上海网络技术学院招生简章 西威变频器服务器不显示 数据库管理系统中数据 软件开发的销售量数据 北京java软件开发招聘 adodb 数据库组件 深圳市和力顺网络技术有限公司 武汉华为研究所软件开发工资 软件开发 30岁 宝山区品牌网络技术服务创造辉煌 传奇技能数据库代码计算 怎样获得企业数据库 Su是什么服务器 校园网络安全提案 计算机的根服务器是什么 玖腾网络技术有限公司怎么样 深圳优普联网络技术有限公司 不同服务器的金币能买时光徽章吗 数据库时标技术的特点 连接数据库删除用户代码 软件开发视频大讲堂c百度云 提高网络安全性措施 服务器怎么创建ftp 校园网络安全法制教育观后感 财政网络安全规划
0