同一網域名稱對應多個IP時,PHP擷取遠程網頁內容的函數

來源:互聯網
上載者:User
PHP擷取遠程網頁內容有多種方式,例如用內建的file_get_contents、fopen等函數。

echo file_get_contents("http://blog.s135.com/abc.php");
?>

 但是,在DNS輪詢等負載平衡中,同一網域名稱,可能對應多台伺服器,多個IP。假設blog.s135.com被DNS解析到 72.249.146.213、72.249.146.214、72.249.146.215三個IP,使用者每次訪問blog.s135.com,系統會 根據負載平衡的相應演算法訪問其中的一台伺服器。

  上周做一個視頻項目時,就碰到這樣一類需求:需要依次訪問每台伺服器上的一個PHP介面程式(假設為abc.php),查詢這台伺服器的傳輸狀態。

  這時就不能直接用file_get_contents訪問http://blog.s135.com/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.s135.com網域名稱。於是,我寫了下面這個PHP函數:

Java代碼

  1. /************************

  2. * 函數用途:同一網域名稱對應多個IP時,擷取指定伺服器的遠程網頁內容

  3. * 建立時間:2008-12-09

  4. * 建立人:張宴(blog.s135.com)

  5. * 參數說明:

  6. * $ip 伺服器的IP地址

  7. * $host 伺服器的host名稱

  8. * $url 伺服器的URL地址(不含網域名稱)

  9. * 傳回值:

  10. * 擷取到的遠程網頁內容

  11. * false 訪問遠程網頁失敗

  12. ************************/

  13. function HttpVisit($ip, $host, $url)

  14. {

  15. $errstr = '';

  16. $errno = '';

  17. $fp = fsockopen ($ip, 80, $errno, $errstr, 90);

  18. if (!$fp)

  19. {

  20. return false;

  21. }

  22. else

  23. {

  24. $out = "GET {$url} HTTP/1.1\r\n";

  25. $out .= "Host:{$host}\r\n";

  26. $out .= "Connection: close\r\n\r\n";

  27. fputs ($fp, $out);

  28. while($line = fread($fp, 4096)){

  29. $response .= $line;

  30. }

  31. fclose( $fp );

  32. //去掉Header頭資訊

  33. $pos = strpos($response, "\r\n\r\n");

  34. $response = substr($response, $pos + 4);

  35. return $response;

  36. }

  37. }

  38. //調用方法:

  39. $server_info1 = HttpVisit("72.249.146.213", "blog.s135.com", "/abc.php");

  40. $server_info2 = HttpVisit("72.249.146.214", "blog.s135.com", "/abc.php");

  41. $server_info3 = HttpVisit("72.249.146.215", "blog.s135.com", "/abc.php");

  42. ?>

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.