<?php
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
;
if
(!preg_match(
"/^https?:\/\//i"
,
$url
)) {
$url
=
"http://"
.
$url
;
}
if
(preg_match(
"/^https:\/\//i"
,
$url
)) {
$port
= 443;
}
$urlinfo
=
parse_url
(
$url
);
if
(emptyempty(
$urlinfo
['path'])) {
$urlinfo
['path'] = '/';
}
$host
=
$urlinfo
['host'];
$uri
=
$urlinfo
['path'] . (emptyempty(
$urlinfo
['query']) ? '' :
$urlinfo
['query']);
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\r\n"
;
$out
.=
"Host: {$host}\r\n"
;
$out
.=
"Connection: Close\r\n\r\n"
;
$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\.\d\s(\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
);
}
?>