同一域名对应多个IP时,PHP获取远程网页内容的函数
fgc就是简单的读取过来,把一切操作封装了
fopen也进行了一些封装,但是需要你循环读取得到所有数据。
fsockopen这是直板板的socket操作。
如果仅仅是读取一个html页面,fgc更好。
如果公司是通过防火墙上网,一 般的file_get_content函数就不行了。当然,通过一些socket操作,直接向proxy写http请求也是可以的,但是比较麻烦。
如果你能确认文件很小,可以任选以上两种方式fopen ,join('',file($file));。比如,你只操作小于1k的文件,那最好还是用file_get_contents吧。
如果确定文件很大,或者不能确定文件的大小,那就最好使用文件流了。fopen一个1K的文件和fopen一个1G的文件没什么明显的区别。内容长,就可以花更长的时间去读,而不是让脚本死掉。
PHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。
<?php echo file_get_contents("http://php.cn/abc.php"); ?>
但是,在DNS轮询等负载均衡中,同一域名,可能对应多台服务器,多个IP。假设http://php.cn/abc.php
被DNS解析到 72.249.146.213、72.249.146.214、72.249.146.215三个IP,用户每次访问http://php.cn/abc.php,系统会根据负载均衡的相应算法访问其中的一台服务器。
上周做一个视频项目时,就碰到这样一类需求:需要依次访问每台服务器上的一个PHP接口程序(假设为abc.php),查询这台服务器的传输状态。
这时就不能直接用file_get_contents访问http://php.cn/abc.php了,因为它可能一直重复访问某一台服务器。
而采用依次访问http://72.249.146.213/abc.php、http://72.249.146.214/abc.php、http://72.249.146.215/abc.php的方法,在这三台服务器上的Web Server配有多个虚拟主机时,也是不行的。
通过设置本地hosts也不行,因为hosts不能设置多个IP对应同一个域名。
那就只有通过PHP和HTTP协议来实现:访问abc.php时,在header头中加上php.cn域名。于是,写了下面这个PHP函数:
<?php /************************ * 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容 * 参数说明: * $ip服务器的IP地址 * $host服务器的host名称 * $url服务器的URL地址(不含域名) * 返回值: * 获取到的远程网页内容 * false访问远程网页失败 ************************/ function HttpVisit($ip, $host, $url) { $errstr = ''; $errno = ''; $fp = fsockopen ($ip, 80, $errno, $errstr, 90); if (!$fp) { return false; } else { $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host:{$host}\r\n"; $out .= "Connection: close\r\n\r\n"; fputs ($fp, $out); while($line = fread($fp, 4096)){ $response .= $line; } fclose( $fp ); //去掉Header头信息 $pos = strpos($response, "\r\n\r\n"); $response = substr($response, $pos + 4); return $response; } } //调用方法: $server_info1 = HttpVisit("72.249.146.213", "php.cn", "/abc.php"); $server_info2 = HttpVisit("72.249.146.214", "php.cn", "/abc.php"); $server_info3 = HttpVisit("72.249.146.215", "php.cn", "/abc.php"); ?>
用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body
<? functionHTTP_Post($URL,$data,$cookie,$referrer=""){ // parsing the given URL $URL_Info=parse_url($URL); // Building referrer if($referrer=="")// if not given use this script. as referrer $referrer="111"; // making string from $data foreach($dataas$key=>$value) $values[]="$key=".urlencode($value); $data_string=implode("&",$values); // Find out which port is needed - if not given use standard (=80) if(!isset($URL_Info["port"])) $URL_Info["port"]=80; // building POST-request: $request.="POST ".$URL_Info["path"]." HTTP/1.1\n"; $request.="Host: ".$URL_Info["host"]."\n"; $request.="Referer:$referer\n"; $request.="Content-type: application/x-www-form-urlencoded\n"; $request.="Content-length: ".strlen($data_string)."\n"; $request.="Connection: close\n"; $request.="Cookie:$cookie\n"; $request.="\n"; $request.=$data_string."\n"; $fp=fsockopen($URL_Info["host"],$URL_Info["port"]); fputs($fp,$request); while(!feof($fp)){ $result.=fgets($fp,1024); } fclose($fp); return$result; } printhr(); ?>
以上是php如何使用同一域名对多个ip抓取远程网页内容?的详细内容。更多信息请关注PHP中文网其他相关文章!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

禅工作室 13.0.1
功能强大的PHP集成开发环境