exec('ping') 在开发服务器中工作但不在生产中
exec('ping') working in development server but no in production
我正在使用 CakePHP 3 编写一个 ping 工具。代码在我的开发服务器上运行,返回正确的状态 0
。但是在生产服务器上它始终显示状态代码 2
而不是 0
,无论 $ip
是否有效。
这是我的代码:
public function testDomain(){
if($this->request->is('post')){
$ip = $this->request->data['domain'];
$starttime = microtime(true);
$stoptime = microtime(true);
$total_time = ($stoptime - $starttime) * 1000;
exec("ping -n 3 $ip", $output, $status);
print_r($status);
if (0 == $status) {
echo $mode = 'up';
if($total_time <= '500'){
$result = 'Very Fast';
}else if($total_time <='1000'){
$result = 'Fast';
}else if($total_time <='1500'){
$result ='Good';
}else if($total_time <='2500'){
$result ='Slow';
}else if($total_time <='3000'){
$result ='Very Slow';
}else{
$result ='down';
}
echo $ip.' '.'is'.' '.$result;
}else{
echo $mode = 'down';
}
}
exit;
}
您的开发机器可能是 Windows,您的生产服务器是 Linux。
这就是当您 运行 您在 Linux 上的命令时发生的情况:
me@mycomputer:~$ ping -n 3 192.168.0.1
connect: Invalid argument
3
不是 ping
的有效参数。
您在 Linux 中的命令应重写为:
exec("ping -c 3 $ip", $output, $status);
我正在使用 CakePHP 3 编写一个 ping 工具。代码在我的开发服务器上运行,返回正确的状态 0
。但是在生产服务器上它始终显示状态代码 2
而不是 0
,无论 $ip
是否有效。
这是我的代码:
public function testDomain(){
if($this->request->is('post')){
$ip = $this->request->data['domain'];
$starttime = microtime(true);
$stoptime = microtime(true);
$total_time = ($stoptime - $starttime) * 1000;
exec("ping -n 3 $ip", $output, $status);
print_r($status);
if (0 == $status) {
echo $mode = 'up';
if($total_time <= '500'){
$result = 'Very Fast';
}else if($total_time <='1000'){
$result = 'Fast';
}else if($total_time <='1500'){
$result ='Good';
}else if($total_time <='2500'){
$result ='Slow';
}else if($total_time <='3000'){
$result ='Very Slow';
}else{
$result ='down';
}
echo $ip.' '.'is'.' '.$result;
}else{
echo $mode = 'down';
}
}
exit;
}
您的开发机器可能是 Windows,您的生产服务器是 Linux。
这就是当您 运行 您在 Linux 上的命令时发生的情况:
me@mycomputer:~$ ping -n 3 192.168.0.1
connect: Invalid argument
3
不是 ping
的有效参数。
您在 Linux 中的命令应重写为:
exec("ping -c 3 $ip", $output, $status);