Network fsockopen

(PHP 4, PHP 5, PHP 7, PHP 8)

fsockopen — 인터넷 또는 Unix 도메인 소켓 연결 열기


설명

fsockopen(
    string $hostname,
    int $port = -1,
    int &$error_code = null,
    string &$error_message = null,
    ?float $timeout = null
): resource|false
                

hostname으로 지정된 리소스에 대한 소켓 연결을 시작합니다.

PHP는 지원되는 소켓 전송 목록에 설명된 대로 인터넷 및 Unix 도메인의 대상을 지원합니다. 지원되는 전송 목록은 stream_get_transports()를 사용하여 검색할 수도 있습니다.

소켓은 기본적으로 차단 모드에서 열립니다. stream_set_blocking()을 사용하여 비차단 모드로 전환할 수 있습니다.

stream_socket_client() 함수는 비슷하지만 비차단 연결 및 스트림 컨텍스트를 제공하는 기능을 포함하여 더 풍부한 옵션 세트를 제공합니다.


매개변수

hostname
OpenSSL 지원이 a href="openssl.installation.php">설치된 경우 hostnamessl:// 또는 tls://를 접두사로 추가하여 TCP/IP를 통한 SSL 또는 TLS 클라이언트 연결을 사용하여 원격 호스트에 연결할 수 있습니다.
port
포트 번호입니다. unix://와 같이 포트를 사용하지 않는 전송의 경우 생략하고 -1로 건너뛸 수 있습니다.
error_code
제공된 경우 시스템 수준 connect() 호출에서 발생한 시스템 수준 오류 번호를 보유합니다.

error_code에 반환된 값이 0이고 함수가 false를 반환하면 connect() 호출 전에 오류가 발생했음을 나타냅니다. 소켓 초기화 문제 때문일 가능성이 큽니다.

error_message
오류 메시지를 문자열로.
timeout
연결 시간 초과(초)입니다. null인 경우 default_socket_timeout php.ini 설정이 사용됩니다.

메모: 소켓을 통한 데이터 읽기/쓰기에 대한 시간 제한을 설정해야 하는 경우 fsockopen()에 대한 timeout 매개변수가 소켓을 연결하는 동안에만 적용되므로 stream_set_timeout()을 사용하십시오.


반환 값

fsockopen()은 다른 파일 함수(예: fgets(), fgetss(), fwrite(), fclose(), feof())와 함께 사용할 수 있는 파일 포인터를 반환합니다. 호출이 실패하면 false를 반환합니다.


오류/예외

hostname이 유효한 도메인이 아니면 E_WARNING을 던집니다.


변경 로그

버전 설명
8.0.0 timeout은 이제 nullable입니다.

Examples

예제 #1 fsockopen() 예제

                  
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>
                  
                

예제 #2 UDP 연결 사용

아래 예는 자신의 컴퓨터에서 UDP 서비스 "daytime"(포트 13)에서 날짜와 시간을 검색하는 방법을 보여줍니다.

                  
<?php
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
    echo "ERROR: $errno - $errstr<br />\n";
} else {
    fwrite($fp, "\n");
    echo fread($fp, 26);
    fclose($fp);
}
?>
                  
                

메모

메모: 환경에 따라 Unix 도메인 또는 선택적 연결 제한 시간을 사용하지 못할 수 있습니다.

경고 UDP 소켓은 원격 호스트에 연결할 수 없는 경우에도 오류 없이 열린 것처럼 보일 수 있습니다. 오류는 소켓에 데이터를 읽거나 쓸 때만 분명해집니다. 그 이유는 UDP가 "연결이 없는" 프로토콜이기 때문입니다. 즉, 운영 체제는 실제로 데이터를 보내거나 받아야 할 때까지 소켓에 대한 링크를 설정하려고 시도하지 않습니다.

메모: 숫자 IPv6 주소(예: fe80::1)를 지정할 때 IP를 대괄호로 묶어야 합니다(예: tcp://[fe80::1]:80).


기타