>  기사  >  백엔드 개발  >  내 PHP ping 기능이 IP 주소에 관계없이 항상 "dead"를 반환하는 이유는 무엇입니까?

내 PHP ping 기능이 IP 주소에 관계없이 항상 "dead"를 반환하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-06 05:13:02715검색

Why does my PHP ping function always return

PHP를 사용하여 IP 주소를 핑하고 결과를 에코

이 프로그래밍 질문에서 사용자는 핑을 위한 PHP 함수를 만드는 데 도움을 구합니다. IP 주소를 입력하고 그것이 살아 있는지 여부를 표시합니다. 기능을 구현했지만 제공된 IP 주소에 관계없이 지속적으로 "dead"를 반환합니다.

초기 기능:

function pingAddress($ip){
    $pingresult = shell_exec("start /b ping $ip -n 1");
    $dead = "Request timed out.";
    $deadoralive = strpos($dead, $pingresult);

    if ($deadoralive == false){
        echo "The IP address, $ip, is dead";
    } else {
        echo "The IP address, $ip, is alive";
    }

}

설명:

이 함수는 하나의 핑 요청만 보내려면 -n 1 옵션과 함께 shell_exec 함수를 사용하여 IP 주소에 대한 핑을 시도합니다. 그런 다음 "Request timed out"이라는 문자열에 대한 ping 명령의 출력을 확인합니다. IP 주소가 살아 있는지 확인합니다.

문제:

  1. Windows 관련 명령: start /b ping 명령은 다음과 같습니다. Windows에만 해당되며 다른 운영 체제에서는 작동하지 않을 수 있습니다.
  2. 출력에 strpos 사용: ping 출력에서 ​​문자열 위치를 직접 확인하는 것은 출력 형식이므로 신뢰할 수 없습니다. ping 명령 버전에 따라 다를 수 있습니다.
  3. 큰따옴표 누락: $ip 변수는 큰따옴표로 묶이지 않아 올바른 해석을 방해할 수 있습니다.

제안된 솔루션:

사용자의 질문은 대체 솔루션도 제안합니다:

function pingAddress($ip) {
    $pingresult = exec("/bin/ping -n 3 $ip", $outcome, $status);
    if (0 == $status) {
        $status = "alive";
    } else {
        $status = "dead";
    }
    echo "The IP address, $ip, is  ".$status;
}

설명:

이 함수는 다음과 같습니다.

  1. exec 함수를 사용하여 -n 3 옵션과 함께 ping 명령을 실행하여 3개의 ping 요청을 보냅니다.
  2. ping 명령의 종료 상태를 확인합니다. 상태 0은 ping 성공을 나타냅니다(즉, IP 주소가 살아 있음).
  3. $status 변수를 사용하여 IP 주소가 살아 있는지 또는 죽었는지 확인하고 그에 따라 결과를 표시합니다.

위 내용은 내 PHP ping 기능이 IP 주소에 관계없이 항상 "dead"를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.