您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > PHP获取远程文件内容
一、介绍只要在php.ini文件中激活了allow_url_fopen选项,您可以在大多数需要用文件名作为参数的函数中使用HTTP和FTPURL来代替文件名。同时,您也可以在include()、include_once()、require()及require_once()语句中使用URL。PHP所支持协议的更多信息参见附录J。注:要在PHP4.0.3及其以后版本中使用URL,您需要用--enable-url-fopen-wrapper参数来配置PHP。Windows版本的PHP4.3版之前不支持以下函数的远程访问:include(),include_once(),require(),require_once()以及参考XLI,图像函数库扩展库中的imagecreatefromXXX函数。例如,您可以用以下范例来打开远程WEB服务器上的文件,解析您需要的输出数据,然后将这些数据用在数据库的检索中,或者简单地将其输出到您网站剩下内容的样式匹配中。例子x.fopen()例子Php代码?php$handle=fopen(/home/rasmus/file.txt,r);$handle=fopen(/home/rasmus/file.gif,wb);$handle=fopen();$handle=fopen(@example.com/somefile.txt,w);??php$handle=fopen(/home/rasmus/file.txt,r);$handle=fopen(/home/rasmus/file.gif,wb);$handle=fopen();$handle=fopen(@example.com/somefile.txt,w);?例子X.获取远程文件的标题Php代码?php$file=fopen();if(!$file){echopUnabletoopenremotefile.\n;exit;}while(!feof($file)){$line=fgets($file,1024);/*Thisonlyworksifthetitleanditstagsareononeline*/if(eregi(title(.*)/title,$line,$out)){$title=$out[1];break;}}fclose($file);??php$file=fopen();if(!$file){echopUnabletoopenremotefile.\n;exit;}while(!feof($file)){$line=fgets($file,1024);/*Thisonlyworksifthetitleanditstagsareononeline*/if(eregi(title(.*)/title,$line,$out)){$title=$out[1];break;}}fclose($file);?如果您用有合法的访问权限,以一个用户的身份和某FTP服务器建立了链接,您还可以向该FTP服务器端的文件进行写操作。您仅能用该方法来创建新的文件;如果您尝试覆盖已经存在的文件,fopen()函数的调用将会失败。要以“anonymous”以外的用户名连接服务器,您需要指明用户名(甚至密码),例如“@ftp.example.com/path/to/file”。(如果通过HTTP协议访问远程文件时需要基本身份认证,您也可以用使用的语法。)例子X.远程服务端的数据存储Php代码?php$file=fopen();if(!$file){echopUnabletoopenremotefileforwriting.\n;exit;}/*Writethedatahere.*/fputs($file,$_SERVER['HTTP_USER_AGENT'].\n);fclose($file);??php$file=fopen();if(!$file){echopUnabletoopenremotefileforwriting.\n;exit;}/*Writethedatahere.*/fputs($file,$_SERVER['HTTP_USER_AGENT'].\n);fclose($file);?注:您或许可以从以上范例中得到启发,用该技术来存储远程日志文件。但是正如以上提到的,在用fopen()方式打开的URL中,您仅能对新文件进行写操作。如果远程文件已经存在fopen()函数的操作将会失败。要进行类似的分布式日志操作,您可以参考syslog()函数。在下面的内容里,我将以更多的实例描述这种功能的应用。二、PHP中的POST&GET的应用要使用PHP的POST&GET,可以运用fsockopen函数:例子1.fsockopen()ExamplePhp代码?php$fp=fsockopen();if(!$fp){echo$errstr($errno)br/\n;}else{$out=GET/HTTP/1.1\r\n;$out.=Host:example.com\r\n;$out.=Connection:Close\r\n\r\n;fputs($fp,$out);while(!feof($fp)){echofgets($fp,128);}fclose($fp);}??php$fp=fsockopen();if(!$fp){echo$errstr($errno)br/\n;}else{$out=GET/HTTP/1.1\r\n;$out.=Host:example.com\r\n;$out.=Connection:Close\r\n\r\n;fputs($fp,$out);while(!feof($fp)){echofgets($fp,128);}fclose($fp);}?例子2.UsingUDPconnectionPhp代码?php$fp=fsockopen(udp://127.0.0.1,13,$errno,$errstr);if(!$fp){echoERROR:$errno-$errstrbr/\n;}else{fwrite($fp,\n);echofread($fp,26);fclose($fp);}??php$fp=fsockopen(udp://127.0.0.1,13,$errno,$errstr);if(!$fp){echoERROR:$errno-$errstrbr/\n;}else{fwrite($fp,\n);echofread($fp,26);fclose($fp);}?例子3Php代码?php//定义一些连接参数$urls=array('host'='localhost','port'=80,'path'='/index.php','method'='POST','protocol'='1.0',);//POST方法传递的参数$ps=array('language'='php','linux'='redhat',);//GET方法传递的参数$gs=array('php'=5,'redhat'=9);/**返回:得到POST或GET方法后返回的字符串(string)参数:$usls:string$ps:array$gs:array调用方法:getData($urls,$ps,'')//使用POST方法getData($urls,'',$gs)//使用GET方法参考资料:*/functiongetData($urls,$ps='',$gs=''){$host=$urls['host'];$port=$urls['port'];$path=$urls['path'];$method=$urls['method'];$protocol=$urls['protocol'];$posts='';$gets='';if(is_array($ps)){foreach($psas$k=$v){$posts.=urlencode($k).=.urlencode($v).'&';}$posts=substr($posts,0,-1);$len=strlen($posts);}if(is_array($gs)){foreach($gsas$k=$v){$gets.=urlencode($k).=.urlencode($v).'&';}$gets=substr($gets,0,-1);}$fp=fsockopen($host,$port,$errno,$errstr,3);if(!$fp){echocan'tconnect...\r\nbrError:$errstr;return;}fputs($fp,$method$path?$getsHTTP/$protocol\r\n);fputs($fp,Host:localhost\r\n);if($posts!=''){fputs($fp,Content-type:application/x-);fputs($fp,Content-Length:$len\r\n);fputs($fp,\r\n);fputs($fp,$posts);}fputs($fp,Connection:Close\r\n\r\n);$s='';do{$data=fgets($fp,1024);if($data==''){break;}$s.=$data;}while(true);fclose($fp);return$s;}//这里是使用POST方法取得目标网页返回的字符串echogetData($urls,$ps,'');//如果要使用GET方法就用如下方式:echogetData($urls,'',$gs);??php//定义一些连接参数$urls=array('host'='localhost','port'=80,'path'='/index.php','method'='POST','protocol'='1.0',);//POST方法传递的参数$ps=array('language'='php','linux'='redhat',);//GET方法传递的参数$gs=array('php'=5,'redhat'=9);/**返回:得到POST或GET方法后返回的字符串(string)参数:$usls:string$ps:array$gs:array调用方法:getData($urls,$ps,'')//使用POST方法getData($urls,'',$gs)//使用GET方法参考资料:*/functiongetData($urls,$ps='',$gs=''){$host=$urls['host'];$port=$urls['port'];$path=$urls['path'];$method=$urls['meth
本文标题:PHP获取远程文件内容
链接地址:https://www.777doc.com/doc-3401491 .html