你好,我在尝试ping IP地址时遇到了一个问题。脚本始终返回该IP处于活动状态,尽管我知道这些IP未处于活动状态。 我真的不知道我的逻辑是不好还是ping脚本写得不好。 先感谢您。 这就是我所拥有的:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Ping;
class ping_controller extends Controller
{
/**
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function ping()
{
$ipcount = Ping::count();
$ip =[];
$i = 1;
for($i = 1; $i <= $ipcount; $i++)
{
$ip[$i] = Ping::where('id',$i)->pluck('ip_adress');
$newip = str_replace('["', '', $ip[$i]);
$newip2 = str_replace('"]', '', $newip);
exec("ping -n 1 " . $newip2 . " | head -n 2 | tail -n 1 | awk '{print $7}'", $ping);
$ping_time = implode("", $ping);
if($ping_time<=1000)
{
$status[$i] = "PC $newip2 is active";
}
else
{
$status[$i] = "PC $newip2 is inactive";
}
}
$on = implode(" , ",$status);
return view("/home")->with("status", $on);
}
答案 0 :(得分:0)
我认为,您必须像这样处理 exec 函数的最后一个参数:
exec("ping -c 1 localhost", $output, $result)
根据docs:
字符串exec(字符串$ command [,数组&$ output [,int&$ return_var]])
return_var
如果return_var参数与输出参数一起出现, 然后执行命令的返回状态将被写入 变量。
所以您必须检查$ result变量是0还是1:
0->成功
1->否则
所以这个:
exec("ping -c 1 " . $newip2, $ping, $result);
if($result == 0)
{
$status[$i] = "PC $newip2 is active";
}
else
{
$status[$i] = "PC $newip2 is inactive";
}
代替:
exec("ping -c 1 " . $newip2 . " | head -n 2 | tail -n 1 | awk '{print $7}'", $ping);
$ping_time = implode("", $ping);
if($ping_time<=1000)
{
$status[$i] = "PC $newip2 is active";
}
else
{
$status[$i] = "PC $newip2 is inactive";
}