Forum und email

fsockopen

(PHP 4, PHP 5)

fsockopen — 인터넷이나 유닉스 도메인의 소켓 연결을 열어줍니다.

Description

int fsockopen ([ string $ udp://hostname ], int $port [, int $ errno [, string $ errstr [, double $ timeout ]]] )

인터넷 (TCP 또는 UDP를 사용하는AF_INET) 또는 유닉스(AF_UNIX)도메인에서 스트림 연결을 시작합니다. 이것은 인터넷 도메인이라는 것 때문에 TCP 소켓을 port 상에서 hostname 에 연결하는 것을 열어줍니다. hostname 은 이와 같은 경우에 완전히 증명이 된 도메인 네임이거나 IP 어드레스일 수 있습니다. UDP 연결에서는 프로토콜을 미리 정의해야 합니다 : udp://hostname . 유닉스 도메인에서는 hostname 이 소켓의 경로로 사용될 수 있는데 이 경우에 port 는 0 으로 설정되어야 합니다. 선택사항인 timeout 은 시스템 호출에 연결되는 것에 대한 시간초과가 몇 초안에 이루어지도록 설정할 수 있습니다.

fsockopen()은 다른 파일관련 함수(다음과 같은 fgets(), fgetss(), fputs(), fclose() 그리고 feof()) 와 사용할 수 있는 파일 포인터를 반환합니다.

호출에 실패하면 FALSE를 반환하고 임의항목인 errnoerrstr 인수가 있다면 시스템 차원의 connect()호출 에서 발생한 실제의 시스템 차원의 에러를 측정하기 위해 설정될 수 있습니다. 반환되는 errno 가 0 이고 함수가 FALSE를 반환했다면 connect()호출 이전에 에러가 발생했다는 것을 알 수 있습니다. 이것은 소켓을 초기화하면서 발생한 문제일 가능성이 높습니다. 주의할 것은 errnoerrstr 인수는 레러 passed by reference되어야 합니다.

환경에 따라 유닉스 도메인이나 선택사항인 연결 시간초과는 사용이 지원되지 않을 수도 있습니다.

소켓은 기본적으로 블로킹 모드(blocking mode)로 열려집니다. socket_set_blocking()을 사용해서 블로킹모드 해제상태(non-blocking mode) 로 전환할 수 있습니다..

Example#1 fsockopen() 예문

$fp = fsockopen ("www.php.net", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br>\n";
} else {
    fputs ($fp, "GET / HTTP/1.0\r\n\r\n");
    while (!feof($fp)) {
        echo fgets ($fp,128);
    }
    fclose ($fp);
}
다음의 예문은 가지고 있는 장비에서 UDP 서비스인 "daytime" (port 13)을 이용해서 어떻게 날짜와 시간을 가져오는지 보여줍니다.

Example#2 UDP 연결을 사용합니다

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