PHP - Linux 上的 Ping exec 挂起脚本
PHP - Ping exec on Linux hangs script
我有一个简单的 PHP 脚本设置来检查我的服务器的状态。它使用标准的 ping 命令,运行 通过 exec()。
- 在 Windows 上,脚本在服务器在线和
下来的时候。
- 在 Linux 上,脚本在服务器联机时运行,但在服务器联机时挂起
服务器已关闭。超时似乎对后者没有影响。
通过控制台使用相同的命令执行 Ping 操作正常并且正确超时。
这是什么原因,如何解决?
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$exec_string = 'ping -n 1 -i 255 -w 2 ' . $host;
} else {
$exec_string = 'ping -n -c 1 -t 255 -w 2 ' . $host;
}
exec($exec_string, $output, $return);
我会避免使用 exec()
直接 ping。我使用这个脚本,found here,你也可以设置端口和超时:
function ping($host, $port = 80, $timeout = 6) {
$fsock = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fsock) {
return false;
} else {
return true;
}
}
$host = 'www.example.com';
if(ping($host)) {
echo "HOST UP";
} else {
echo "HOST DOWN";
}
我不确定为什么,但是从 suPHP 切换到 fastCGI(都启用了 suEXEC)似乎解决了问题并且 ping 正常超时。
如果有人对此有任何解释,我很乐意以评论或回答的形式知道。
我有一个简单的 PHP 脚本设置来检查我的服务器的状态。它使用标准的 ping 命令,运行 通过 exec()。
- 在 Windows 上,脚本在服务器在线和 下来的时候。
- 在 Linux 上,脚本在服务器联机时运行,但在服务器联机时挂起 服务器已关闭。超时似乎对后者没有影响。
通过控制台使用相同的命令执行 Ping 操作正常并且正确超时。
这是什么原因,如何解决?
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$exec_string = 'ping -n 1 -i 255 -w 2 ' . $host;
} else {
$exec_string = 'ping -n -c 1 -t 255 -w 2 ' . $host;
}
exec($exec_string, $output, $return);
我会避免使用 exec()
直接 ping。我使用这个脚本,found here,你也可以设置端口和超时:
function ping($host, $port = 80, $timeout = 6) {
$fsock = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fsock) {
return false;
} else {
return true;
}
}
$host = 'www.example.com';
if(ping($host)) {
echo "HOST UP";
} else {
echo "HOST DOWN";
}
我不确定为什么,但是从 suPHP 切换到 fastCGI(都启用了 suEXEC)似乎解决了问题并且 ping 正常超时。
如果有人对此有任何解释,我很乐意以评论或回答的形式知道。