當同一網域對應多個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判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

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

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

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),