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程序设计有所帮助。