<?php $url = ""; if(array_key_exists('url',$_GET)){ $url = $_GET['url']; } $hosts = array("", "", "","","","vip.xunlei.com"); #$hosts = array($url);
$timeout = 5; $status = array(); $retdata = array(); $sockets = array(); $e = array(); /* Initiate connections to all the hosts simultaneously */ 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] = "in progress"; } else { $status[$id] = "failed, $errno $errstr"; } $retdata[$id] = ''; } /* Now, wait for the results to come back in */ while (count($sockets)) { $read = $write = $sockets; /* This is the magic function - explained below */ $n = stream_select($read, $write, $e, $timeout); if ($n > 0) { /* readable sockets either have data for us, or are failed connection attempts */ foreach ($read as $r) { $id = array_search($r, $sockets); $data = fread($r, 8192); if (strlen($data) == 0) { if ($status[$id] == "in progress") { $status[$id] = "failed to connect"; } fclose($r); unset($sockets[$id]); } else { $retdata[$id] .= $data; } } /* writeable sockets can accept an HTTP request */ foreach ($write as $w) { if(!is_resource($w))continue; $id = array_search($w, $sockets); fwrite($w, "GET / HTTP/1.0\r\nHost: ".$hosts[$id]."\r\n\r\n"); $status[$id] = "waiting for response"; } } else { /* timed out waiting; assume that all hosts associated * with $sockets are faulty */ foreach ($sockets as $id => $s) { $status[$id] = "timed out " . $status[$id]; } break; } } foreach ($hosts as $id => $host) { #echo "Host: $host\n";
#echo "Status: " . $status[$id] . "\n";
#echo "Retdata: " . $retdata[$id] . "\n";
$strs = explode("\r\n\r\n",$retdata[$id],2); echo isset($strs[1])?$strs[1]:$retdata[$id]; } function debug($i){ var_dump($i); var_dump(gettype($i)); var_dump(is_resource($i)); } ?>
|