Streams stream_socket_client
(PHP 5, PHP 7, PHP 8)
stream_socket_client — 인터넷 또는 Unix 도메인 소켓 연결 열기
설명
stream_socket_client( string $address, int &$error_code = null, string &$error_message = null, ?float $timeout = null, int $flags = STREAM_CLIENT_CONNECT, ?resource $context = null ): resource|false
address
로 지정된 대상에 대한 스트림 또는 데이터그램 연결을 시작합니다. 생성된 소켓 유형은 표준 URL 형식인 transport://target
을 사용하여 지정된 전송에 의해 결정됩니다. TCP 및 UDP와 같은 인터넷 도메인 소켓(AF_INET)의 경우 address
매개변수의 target
부분은 호스트 이름 또는 IP 주소 다음에 콜론 및 포트 번호로 구성되어야 합니다. Unix 도메인 소켓의 경우 target
부분은 파일 시스템의 소켓 파일을 가리켜야 합니다.
메모: 스트림은 기본적으로 차단 모드에서 열립니다. stream_set_blocking()을 사용하여 비차단 모드로 전환할 수 있습니다.
매개변수
address
- 연결할 소켓의 주소입니다.
error_code
- 연결에 실패하면 시스템 수준 오류 번호로 설정됩니다.
error_message
- 연결이 실패하면 시스템 수준 오류 메시지로 설정됩니다.
timeout
connect()
시스템 호출이 시간 초과될 때까지의 시간(초)입니다. 기본적으로 default_socket_timeout이 사용됩니다.메모: 이 매개변수는 비동기식 연결을 시도하지 않는 경우에만 적용됩니다.
메모: 소켓을 통한 데이터 읽기/쓰기에 대한 제한 시간을 설정하려면 소켓을 연결하는 동안에만
timeout
이 적용되므로 stream_set_timeout()을 사용하십시오.flags
- 연결 플래그의 모든 조합으로 설정할 수 있는 비트 마스크 필드입니다. 현재 연결 플래그 선택은
STREAM_CLIENT_CONNECT
(기본값),STREAM_CLIENT_ASYNC_CONNECT
및STREAM_CLIENT_PERSISTENT
로 제한됩니다. context
- stream_context_create()로 생성된 유효한 컨텍스트 리소스.
반환 값
성공하면 다른 파일 함수(예: fgets(), fgetss(), fwrite(), fclose(), feof())와 함께 사용할 수 있는 스트림 리소스가 반환되고 실패하면 false
입니다.
오류/예외
실패 시 error_code
및 error_message
인수는 시스템 수준 connect()
호출에서 발생한 실제 시스템 수준 오류로 채워집니다. error_code
에 반환된 값이 0
이고 함수가 false
를 반환하면 connect()
호출 전에 오류가 발생했음을 나타냅니다. 소켓 초기화 문제 때문일 가능성이 큽니다. error_code
및 error_message
인수는 항상 참조로 전달됩니다.
변경 로그
버전 | 설명 |
---|---|
8.0.0 | timeout 과 context 는 이제 nullable입니다. |
Examples
예제 #1 stream_socket_client() 예제
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
?>
예제 #2 UDP 연결 사용
localhost의 UDP 서비스 "daytime"(포트 13)에서 날짜와 시간을 검색합니다.
<?php
$fp = stream_socket_client("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);
}
?>
메모
경고 UDP 소켓은 원격 호스트에 연결할 수 없는 경우에도 오류 없이 열린 것처럼 보일 수 있습니다. 오류는 소켓에 데이터를 읽거나 쓸 때만 분명해집니다. 그 이유는 UDP가 "connectionless" 프로토콜이기 때문입니다. 즉, 운영 체제는 실제로 데이터를 보내거나 받아야 할 때까지 소켓에 대한 링크를 설정하려고 시도하지 않습니다.
참고: 숫자 IPv6 주소(예: fe80::1
)를 지정할 때 IP를 대괄호로 묶어야 합니다(예: tcp://[fe80::1]:80
).
참고: 환경에 따라 Unix 도메인 또는 선택적 연결 제한 시간을 사용하지 못할 수 있습니다. 사용 가능한 전송 목록은 stream_get_transports()를 사용하여 검색할 수 있습니다. 기본 제공 전송 목록은 지원되는 소켓 전송 목록을 참조하세요.
기타
- stream_socket_server() - 인터넷 또는 Unix 도메인 서버 소켓 만들기
- stream_set_blocking() - 스트림에서 차단/비차단 모드 설정
- stream_set_timeout() - 스트림에 시간 초과 기간 설정
- stream_select() - 초 및 마이크로초로 지정된 시간 제한을 사용하여 지정된 스트림 배열에서 select() 시스템 호출과 동일한 기능을 실행합니다.
- fgets() - 파일 포인터에서 라인 가져오기
- fgetss() - 파일 포인터에서 줄을 가져오고 HTML 태그를 제거합니다.
- fwrite() - 바이너리 안전 파일 쓰기
- fclose() - 열린 파일 포인터를 닫습니다
- feof() - 파일 포인터에서 파일 끝 테스트
- cURL Functions