- $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","vip.xunlei.com ");
- #$hosts = array($url);
- $timeout = 5;
- $status = array();
- $retdata = array();
- $sockets = array() ;
- $e = array();
- /* すべてのホストへの接続を同時に開始 */
- foreach ($hosts as $id => $host) {
- $errno = 0;
- $errstr = "";
- $s = stream_socket_client("$host:80", $errno, $errstr, $timeout,STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
- if ($s) {
- $sockets[$id] = $ s;
- $status[$id] = "進行中";
- } else {
- $status[$id] = "失敗しました、$errno $errstr";
- }
- $retdata[$id] = ;
- }
- /* さて、結果が戻ってくるのを待ちます */
- while (count($sockets)) {
- $read = $write = $sockets;
- /* これはマジック関数 - 以下で説明 */
- $n = stream_select($read, $write, $e, $timeout);
- if ($n > 0) {
- /* 読み取り可能なソケットにはデータがあり、または接続試行が失敗した */
- foreach ($read as $r) {
- $id = array_search($r, $sockets);
- $data = fread($r, 8192);
- if (strlen ($data) == 0) {
- if ($status[$id] == "進行中") {
- $status[$id] = "接続に失敗しました";
- }
- fclose($ r);
- unset($sockets[$id]);
- } else {
- $retdata[$id] .= $data;
- }
- }
- /* 書き込み可能なソケットは HTTP リクエストを受け入れることができます*/
- foreach ($write as $w) {
- if(!is_resource($w)) continue;
- $id = array_search($w, $sockets);
- fwrite($w, "GET / HTTP/1.0 ホスト: ".$hosts[$id].");
- $status[$id] = "応答待ち";
- }
- } else {
- /* 待機中にタイムアウトしました。関連付けられたすべてのホスト
- * $sockets に障害があると仮定します */
- foreach ($sockets as $id => $s) {
- $status[$id] = "timed out " 。 $status[$id];
- }
- Break;
- }
- }
- foreach ($hosts as $id => $host) {
- #echo "ホスト: $host ";
-
- #echo "ステータス: " . $status[$id] 。 " ";
-
- #echo "Retdata: " . $retdata[$id] 。 " ";
-
- $strs =explode(" ",$retdata[$id],2);
- echo isset($strs[1])?$strs[1]:$retdata[$id];
- }
- 関数デバッグ($i){
- var_dump($i);
- var_dump(gettype($i));
- var_dump(is_resource($i));
- }
- ?>
-
http://www.bkjia.com/PHPjc/486113.htmlwww.bkjia.comtruehttp://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.. .