PHP实现的下载远程文件类定义与用法示例
本文实例讲述了PHP实现的下载远程文件类定义与用法。分享给大家供大家参考,具体如下:
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; } } } /** *打开指定网址 */ functionOpenUrl($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(); } /** *获得某操作错误的原因 */ publicfunctionprintError(){ echo"错误信息:".$this->m_error; echo"具体返回头:
"; foreach($this->m_httpheadas$k=>$v){ echo"$k=>$v
\r\n"; } } /** *判别用Get方法发送的头的应答结果是否正确 */ publicfunctionIsGetOK(){ if(ereg("^2",$this->GetHead("http-state"))){ returntrue; }else{ $this->m_error.=$this->GetHead("http-state")."-".$this->GetHead("http-describe")."
"; returnfalse; } } /** *看看返回的网页是否是text类型 */ publicfunctionIsText(){ if(ereg("^2",$this->GetHead("http-state"))&&eregi("^text",$this->GetHead("content-type"))){ returntrue; }else{ $this->m_error.="内容为非文本类型
"; returnfalse; } } /** *判断返回的网页是否是特定的类型 */ publicfunctionIsContentType($ctype){ if(ereg("^2",$this->GetHead("http-state"))&&$this->GetHead("content-type")==strtolower($ctype)){ returntrue; }else{ $this->m_error.="类型不对".$this->GetHead("content-type")."
"; returnfalse; } } /** *用HTTP协议下载文件 */ publicfunctionSaveToBin($savefilename){ if(!$this->IsGetOK())returnfalse; if(@feof($this->m_fp)){ $this->m_error="连接已经关闭!"; returnfalse; } $fp=fopen($savefilename,"w")ordie("写入文件$savefilename失败!"); while(!feof($this->m_fp)){ @fwrite($fp,fgets($this->m_fp,256)); } @fclose($this->m_fp); returntrue; } /** *保存网页内容为Text文件 */ publicfunctionSaveToText($savefilename){ if($this->IsText()){ $this->SaveBinFile($savefilename); }else{ return""; } } /** *用HTTP协议获得一个网页的内容 */ publicfunctionGetHtml(){ 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会话 */ publicfunctionPrivateStartSession(){ if(!$this->PrivateOpenHost()){ $this->m_error.="打开远程主机出错!"; returnfalse; } 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;$im_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头的值 */ publicfunctionGetHead($headname){ $headname=strtolower($headname); if(isset($this->m_httphead[$headname])){ return$this->m_httphead[$headname]; }else{ return""; } } /** *打开连接 */ publicfunctionPrivateOpenHost(){ if($this->m_host=="")returnfalse; $this->m_fp=@fsockopen($this->m_host,$this->m_port,&$errno,&$errstr,10); if(!$this->m_fp){ $this->m_error=$errstr; returnfalse; }else{ returntrue; } } /** *关闭连接 */ publicfunctionClose(){ @fclose($this->m_fp); } } #两种使用方法,分别如下: #打开网页 $httpdown=newHttpDownload(); $httpdown->OpenUrl("http://www.google.com.hk"); echo$httpdown->GetHtml(); $httpdown->Close(); #下载文件 $file=newHttpDownload();#实例化类 $file->OpenUrl("http://www.ti.com.cn/cn/lit/an/rust020/rust020.pdf");#远程文件地址 $file->SaveToBin("rust020.pdf");#保存路径及文件名 $file->Close();#释放资源 ?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。