同域名多IP下PHP獲取遠程網頁內容的函數
來源:程序員人生 發布時間:2013-12-01 03:39:35 閱讀次數:2726次
建站學院(LieHuo.Net)PHP教程 PHP獲取遠程網頁內容有多種方式,例如用自帶的file_get_contents、fopen等函數。
<?php echo file_get_contents("http://www.veryhuo.com/abc.php"); ?> |
但是,在DNS輪詢等負載均衡中,同一域名,可能對應多臺服務器,多個IP。假設blog.kcoffee.net被DNS解析到72.249.146.213、72.249.146.214、72.249.146.215三個IP,用戶每次訪問blog.kcoffee.net,系統會根據負載均衡的相應算法訪問其中的一臺服務器。
上周做一個視頻項目時,就碰到這樣一類需求:需要依次訪問每臺服務器上的一個PHP接口程序(假設為abc.php),查詢這臺服務器的傳輸狀態。
這時就不能直接用file_get_contents訪問blog.kcoffee.net/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頭中加上blog.kcoffee.net域名。于是,我寫了下面這個PHP函數。
以下為引用的內容: <?php /************************ * 函數用途:同一域名對應多個IP時,獲取指定服務器的遠程網頁內容 * 創建時間:2008-12-09 * 創建人:張宴(blog.s135.com) * 參數說明: * $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"; $out .= "Host:{$host}"; $out .= "Connection: close"; fputs ($fp, $out); while($line = fread($fp, 4096)){ $response .= $line; } fclose( $fp ); //去掉Header頭信息 $pos = strpos($response, ""); $response = substr($response, $pos + 4); return $response; } } //調用方法: $server_info1 = HttpVisit("72.249.146.213", "blog.s135.com", "/abc.php"); $server_info2 = HttpVisit("72.249.146.214", "blog.s135.com", "/abc.php"); $server_info3 = HttpVisit("72.249.146.215", "blog.s135.com", "/abc.php"); ?> |
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈