일일 개발에서는 웹 서비스 (예 : 80, 443), 데이터베이스 서비스 (예 : 3306, 5432) 또는 사용자 정의 포트가 정상적으로 실행되는지 확인하는 것과 같은 원격 서버의 특정 포트가 열려 있는지 확인해야합니다. FSOCCKOPEN () 은 소켓 연결을 설정하는 데 사용할 수있는 PHP가 제공하는 기본 기능으로 간단한 포트 프로브에 사용할 수 있습니다.
이 기사는 FSOCCKOPEN () 함수를 사용하여 원격 서버 포트가 열려 있는지 여부를 감지하고 특정 구현 단계 및 예방 조치를 제공하는 방법을 소개합니다.
fsocckopen () 은 네트워크 연결 또는 UNIX 소켓 연결을 열는 데 사용되는 기능입니다. 구문은 다음과 같습니다.
resource|false fsockopen(
string $hostname,
int $port,
int &$error_code = null,
string &$error_message = null,
float $timeout = ini_get("default_socket_timeout")
)
매개 변수 설명 :
$ hostname : 도메인 이름 또는 IP 주소가 될 수있는 대상 호스트.
$ 포트 : 연결할 포트 번호.
$ error_code (선택 사항) : 연결이 실패하면 오류 코드입니다.
$ ERROR_MESSAGE (선택 사항) : 연결 실패시 오류 메시지.
$ 타임 아웃 (선택 사항) : 연결 시간 초과 (초).
우리는 fsocckopen () 을 통해 지정된 주소의 포트에 연결하려고합니다. 연결이 성공하면 포트가 열려 있다고 생각할 수 있습니다. 그렇지 않으면 포트가 닫히는 것으로 간주되거나 호스트는 도달 할 수 없습니다.
<?php
function isPortOpen($host, $port, $timeout = 5)
{
$errno = 0;
$errstr = '';
$connection = @fsockopen($host, $port, $errno, $errstr, $timeout);
if (is_resource($connection)) {
fclose($connection);
return true;
} else {
return false;
}
}
// 예:시험 gitbox.net ~의 443 포트가 열려 있습니까?
$host = 'gitbox.net';
$port = 443;
if (isPortOpen($host, $port)) {
echo "포트 {$port} 존재하다 {$host} 上是开放~의。";
} else {
echo "포트 {$port} 존재하다 {$host} 개방적이거나 도달 할 수 없습니다。";
}
대상 호스트와 포트 번호를 정의하십시오 gitbox.net 및 443 과 같이 감지하려는 서버 주소와 포트를 결정하십시오.
fsocckopen () <br>를 사용하여 연결하려고합니다 @fsocopen ()을 사용하여 기본 오류 출력을 억제하고 반환 값으로 연결이 성공했는지 확인하십시오.
연결 연결 결과
성공 : 포트가 열려 있음을 의미합니다.
실패 : 포트가 열려 있지 않음을 나타냅니다. 이는 서버 방화벽으로 인한 것일 수 있거나 포트가 듣지 않을 수 있습니다.
연결 자원을 닫습니다 <br> 연결이 성공하면 fclose ()를 사용하여 연결 리소스를 닫으려면 리소스 누출을 피해야합니다.
웹 사이트 모니터링 시스템에서 서비스 포트가 정상인지 정기적으로 확인하십시오.
자동화 된 배포 도구에서 대상 서비스가 준비되었는지 확인하십시오.
지역 개발 및 디버깅 중에 포트 접근성을 신속하게 감지합니다.
작동 및 유지 보수 도구 스크립트에서 포트 감지 기능을 통합합니다.
fsocopen ()은 높은 동시 동반 포트 감지 시나리오에 적합하지 않으며 그 효율은 상대적으로 낮습니다.
일부 서버 구성에서는 보안 정책으로 인해이 기능이 금지 될 수 있습니다.
@를 사용하여 오류 출력을 억제 할 때 예외를 잘 처리해야합니다.
감지 된 서버는 IP 화이트리스트, 방화벽 등으로 구성되어 감지 결과에 영향을 미칩니다.