지원 프로토콜/래퍼 목록
PHP Manual

HTTP 와 HTTPS

PHP 4, PHP 5, PHP 6. PHP 4.3.0부터 https://

HTTP GET 방식을 사용하여, HTTP 1.0으로 파일/자원에 읽기 전용 권한을 허용합니다. 이름 기반 가상 호스트를 처리하기 위해서 Host: 헤더를 전송합니다. ini 파일이나 스트림 환경을 사용하여 user_agent 문자열을 설정하면, 요청에 같이 포함합니다.

Warning

SSL을 사용할 때, 마이크로소프트 IIS는 close_notify 식별자를 보내지 않은채 접속을 종료하는 프로토콜 오류가 있습니다. PHP는 데이터의 마지막에 도달했을때, 이를 "SSL: Fatal Protocol Error"로 보고합니다. 이를 처리하기 위해서는 error_reporting 레벨에 경고를 포함하지 않도록 해야합니다. PHP 4.3.7 이후는 https:// 래퍼를 통해 스트림을 열 때, 문제가 있는 IIS 서버 소프트웨어를 검출하여 경고를 하지 않습니다. ssl:// 소켓을 만들기 위해 fsockopen()을 사용한다면, 경고를 직접 검출하여 없애야 합니다.

리다이렉트(Redirect)는 PHP 4.0.5부터 지원합니다; 이전 버전을 사용한다면 URL의 마지막에 슬래시를 포함해야 합니다. (모든 리다이렉트를 처리한 에후) 문서가 어떤 URL 오는지 파악해야 한다면, 스트림을 통해 반환하는 응답 헤더를 처리해야 합니다.

<?php
$url 
'http://www.example.com/redirecting_page.php';

$fp fopen($url'r');

/* PHP 4.3.0 이전은 stream_get_meta_data()
   대신 $http_response_header를 사용하십시오 */
$meta_data stream_get_meta_data($fp);
foreach(
$meta_data['wrapper_data'] as $response) {

  
/* 어디로 리다이렉트합니까? */
  
if (substr(strtolower($response), 010) == 'location: ') {
    
/* 리다이렉트 되는 곳으로 $url을 갱신합니다 */
    
$url substr($response18);
  }

}

?>

스트림은 리소스의 body에 접속할 권한이 있다; 헤더는 $http_response_header 변수에 저장된다. PHP 4.3.0 이후부터, 헤더는 stream_get_meta_data()를 사용하여 이용가능하다.

HTTP 접속은 읽기-전용이다; HTTP 리소스에 데이터를 쓰거나 파일을 복사할수 없다.

Note: HTTPS는 PHP 4.3.0부터 지원되었다. OpenSSL에 대한 지원 옵션으로 컴파일해야 한다.

래퍼 요약
속성 지원
allow_url_fopen으로 제한
읽기 허용
쓰기 허용 아니오
추가 허용 아니오
동시 읽기/쓰기 허용 N/A
stat() 지원 아니오
unlink() 지원 아니오
rename() 지원 아니오
mkdir() 지원 아니오
rmdir() 지원 아니오

버전 5 이전에서, HTTP 요청에 사용자 헤더를 보내기 위해서는 user_agent INI 설정의 부작용을 이용해야 합니다. user_agent에 유효한 문자열(기본 PHP/version 설정 등)을 설정하고, CR/LF를 넣은 후 추가 헤더를 넣었습니다. 이 방법은 PHP 4와 이후의 모든 버전에서 작동합니다.

Example #1 HTTP 요청에 사용자 헤더 전송하기

<?php
ini_set
('user_agent'"PHP\r\nX-MyCustomHeader: Foo");

$fp fopen('http://www.example.com/index.php''r');
?>

위 결과로 보내지는 요청은:

GET /index.php HTTP/1.0
Host: www.example.com
User-Agent: PHP
X-MyCustomHeader: Foo


지원 프로토콜/래퍼 목록
PHP Manual