PHP获取HTTP状态和响应时间
function
get_http_code($url="localhost",
$port=80,
$fsock_timeout=10){
set_time_limit(0);
ignore_user_abort(true);
// 记录开始时间
list($usec,
$sec) = explode(" ", microtime(true));
$timer["start"] = (float)$usec
+ (float)$sec;
// 校验URL
if(!preg_match("/^https?:///i",
$url)){
$url
= "http://".$url;
}
// 支持HTTPS
if(preg_match("/^https:///i",
$url)){
$port
= 443;
}
// 解析URL
$urlinfo
= parse_url($url);
if(empty($urlinfo["path"])){
$urlinfo["path"] =
"/";
}
$host
= $urlinfo["host"];
$uri
= $urlinfo["path"] . (empty($urlinfo["query"])?"":$urlinfo["query"]);
// 通过fsock打开连接
if(!$fp
= fsockopen($host,
$port, $errno,
$error, $fsock_timeout)){
list($usec,
$sec) = explode(" ", microtime(true));
$timer["end"] = (float)$usec
+ (float)$sec;
$usetime
= (float)$timer["end"] - (float)$timer["start"];
return
array("code"=>-1,
"usetime"=>$usetime);
}
// 提交请求
$status
= socket_get_status($fp);
$out
= "GET {$uri} HTTP/1.1
";
$out
.= "Host: {$host}
";
$out
.= "Connection: Close
";
$write
= fwrite($fp,
$out);
if(!$write){
list($usec,
$sec) = explode(" ", microtime(true));
$timer["end"] = (float)$usec
+ (float)$sec;
$usetime
= (float)$timer["end"] - (float)$timer["start"];
return
array("code"=>-2,
"usetime"=>$usetime);
}
$ret
= fgets($fp, 1024);
preg_match("/http/d.ds(d+)/i",
$ret, $m);
$code
= $m[1];
fclose($fp);
list($usec,
$sec) = explode(" ", microtime(true));
$timer["end"] = (float)$usec
+ (float)$sec;
$usetime
= (float)$timer["end"] - (float)$timer["start"];
return
array("code"=>$code,
"usetime"=>$usetime);
}
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: PHP求字符串的长度 部分正则表达式
- 下一篇:没有了
