在我的PHP错误日志中,我收到这样的多个警告:
PHP警告:socket_read():无法从套接字[10060]读取:连接尝试失败,因为一段时间后被连接方未正确响应,或者由于连接的主机未能响应而导致建立的连接失败。 / p>
我想以某种方式删除此警告,因为有时我要ping的主机IP将脱机,然后发送这些警告。在执行读取之前可以检查吗?这是下面的代码:
function ping($host){
defined('COUNT') or define('COUNT', '3');
defined('INTERVAL') or define('INTERVAL', '1');
$ipAddress = gethostbyname($host);
$protocolNumber = getprotobyname("icmp");
$socket = socket_create(AF_INET, SOCK_RAW, $protocolNumber);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 1, 'usec' => 0));
socket_connect($socket, $host, 0);
$hostIsAlive = 0;
for ($i = 0; $i < COUNT; $i++) {
$startTime = microtime(true);
$package = "\x08\x00\x19\x2f\x00\x00\x00\x00\x70\x69\x6e\x67";
socket_send($socket, $package, strlen($package), 0);
if (socket_read($socket, 255)) {
$hostIsAlive = 1;
echo "successful ping to $ipAddress\n";
} else {
echo "failed to ping $ipAddress\n";
}
if ($i < (COUNT - 1)) {
sleep(INTERVAL);
}
}
socket_close($socket);
return $hostIsAlive;
}