ホームページ > バックエンド開発 > PHPチュートリアル > PHP同時取得(stream_select)情報プログラムコード_PHPチュートリアル

PHP同時取得(stream_select)情報プログラムコード_PHPチュートリアル

WBOY
リリース: 2016-07-13 17:41:53
オリジナル
1478 人が閲覧しました

  1. $url = "www.ite5e.com";
  2. if(array_key_exists(url,$_GET)){
  3. $url = $_GET[url];
  4. }
  5. $ hosts = array("www.xunlei.com", "www.qq.com", "www.163.com","www.baidu.com","www.kaixin.com","vip.xunlei.com ");
  6. #$hosts = array($url);
  7. $timeout = 5;
  8. $status = array();
  9. $retdata = array();
  10. $sockets = array() ;
  11. $e = array();
  12. /* すべてのホストへの接続を同時に開始 */
  13. foreach ($hosts as $id => $host) {
  14. $errno = 0;
  15. $errstr = "";
  16. $s = stream_socket_client("$host:80", $errno, $errstr, $timeout,STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
  17. if ($s) {
  18. $sockets[$id] = $ s;
  19. $status[$id] = "進行中";
  20. } else {
  21. $status[$id] = "失敗しました、$errno $errstr";
  22. }
  23. $retdata[$id] = ;
  24. }
  25. /* さて、結果が戻ってくるのを待ちます */
  26. while (count($sockets)) {
  27. $read = $write = $sockets;
  28. /* これはマジック関数 - 以下で説明 */
  29. $n = stream_select($read, $write, $e, $timeout);
  30. if ($n > 0) {
  31. /* 読み取り可能なソケットにはデータがあり、または接続試行が失敗した */
  32. foreach ($read as $r) {
  33. $id = array_search($r, $sockets);
  34. $data = fread($r, 8192);
  35. if (strlen ($data) == 0) {
  36. if ($status[$id] == "進行中") {
  37. $status[$id] = "接続に失敗しました";
  38. }
  39. fclose($ r);
  40. unset($sockets[$id]);
  41. } else {
  42. $retdata[$id] .= $data;
  43. }
  44. }
  45. /* 書き込み可能なソケットは HTTP リクエストを受け入れることができます*/
  46. foreach ($write as $w) {
  47. if(!is_resource($w)) continue;
  48. $id = array_search($w, $sockets);
  49. fwrite($w, "GET / HTTP/1.0 ホスト: ".$hosts[$id].");
  50. $status[$id] = "応答待ち";
  51. }
  52. } else {
  53. /* 待機中にタイムアウトしました。関連付けられたすべてのホスト
  54. * $sockets に障害があると仮定します */
  55. foreach ($sockets as $id => $s) {
  56. $status[$id] = "timed out " 。 $status[$id];
  57. }
  58. Break;
  59. }
  60. }
  61. foreach ($hosts as $id => $host) {
  62. #echo "ホスト: $host ";
  63. #echo "ステータス: " . $status[$id] 。 " ";
  64. #echo "Retdata: " . $retdata[$id] 。 " ";
  65. $strs =explode(" ",$retdata[$id],2);
  66. echo isset($strs[1])?$strs[1]:$retdata[$id];
  67. }
  68. 関数デバッグ($i){
  69. var_dump($i);
  70. var_dump(gettype($i));
  71. var_dump(is_resource($i));
  72. }
  73. ?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/486113.html技術記事 ?php $url = "www.ite5e.com"; if(array_key_exists(url,$_GET)){ $url = $_GET[url]; $hosts = array("www.xunlei.com", "www.qq.com", "www.163.com","www.baidu.com","www.kaixin.com","vi.. .
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート