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">설치된 경우
hostname
에ssl://
또는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
).
기타
- pfsockopen() - 영구 인터넷 또는 Unix 도메인 소켓 연결 열기
- stream_socket_client() - 인터넷 또는 Unix 도메인 소켓 연결 열기
- stream_set_blocking() - 스트림에서 차단/비차단 모드 설정
- stream_set_timeout() - 스트림에 시간 초과 기간 설정
- fgets() - 파일 포인터에서 라인 가져오기
- fgetss() - 파일 포인터에서 줄을 가져오고 HTML 태그를 제거합니다.
- fwrite() - 바이너리 안전 파일 쓰기
- fclose() - 열린 파일 포인터를 닫습니다
- feof() - 파일 포인터에서 파일 끝 테스트
- socket_connect() - 소켓에서 연결을 시작합니다.
- Curl extension