Laravel ping IP 检查在线或离线状态

Soh*_*han 1 ip ping laravel

我正在使用 Laravel v.6.11。我想 ping 一个 IP:端口来检查其状态是在线还是离线。为此,我使用karlmonson/laravel-ping包。每当我 ping 它返回错误状态时,有时服务器处于开启状态并且返回 false,反之亦然。

我的控制器

<?php

namespace App\Http\Controllers\User;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Ping;

class PlexServerController extends Controller
{
    public function serverStatus(Request $request)
    {
        $ip = $request->ip;
        $port = $request->port;
        $health = Ping::check($ip.':'.$port);
        if($health == 200){
            return $json = json_encode(['status' => '1','health' => $health]);
        } else {
            return $json = json_encode(['status' => '2','health' => $health]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我希望有人能帮助我摆脱这个问题。我还使用laravelcollective/remote来运行 SSH 命令。太酷了,它可以运行所有命令。任何人都可以帮助我解决检查IP是否在线或离线并返回带有状态代码的响应的问题。

Soh*_*han 8

好吧,经过几天的谷歌搜索,我终于得到了另一个解决方案,但忘记发布我的答案,因为没有人回复它。您可以遵循以下curl,因为它也内置在Laravel中,如果您使用基于 Ubuntu/Linux 的服务器,速度会很快。下面是我输入的虚拟IP端口

    $ip = '127.0.0.1';
    $port = '22';
    $url = $ip . ':' . $port;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    $health = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($health) {
        $json = json_encode(['health' => $health, 'status' => '1']);
        return $json;
    } else {
        $json = json_encode(['health' => $health, 'status' => '0']);
        return $json;
    }
Run Code Online (Sandbox Code Playgroud)