php.ini에서 allow_url_fopen 을 활성화하면, 대부분의 함수에서 파일명 인수로 HTTP와 FTP URL을 사용할 수 있습니다. 이와 더불어 URL을 include(), include_once(), require(), require_once() 구문에서 사용할수 있다. (PHP 5.2.0부터, 이 기능을 사용하려면 allow_url_include를 활성화해야 합니다) PHP가 지원하는 프로토콜에 대한 정보는 지원 프로토콜/래퍼 목록를 참고하십시오.
Note: PHP 4.0.3 이하에서 URL 래퍼(wrapper)를 사용하기 위해서는 configure 옵션으로 --enable-url-fopen-wrapper을 명시할 필요가 있다.
Note: PHP 4.3 이하 버전의 PHP 윈도우 버전은 다음 함수에서 원격 파일 접근을 지원하지 않는다: include(), include_once(), require(), require_once(), 그리고 GD and Image 함수 목록 내의 imagecreatefromXXX 함수.
예를 들어, 이 기능을 사용하여 원격 웹 서버가 출력하는 내용을 파일로 열고, 그 출력 내용에서 원하는 데이타를 분석하여, 이 원하는 데이타로 데이타베이스 질의에 사용하거나, 웹 사이트에 맞는 모양으로 변형 시켜 출력할 수 있다
Example #1 원격 페이지의 제목을 가져오기
<?php
$file = fopen ("http://www.php.net/", "r");
if (!$file) {
echo "<p>Unable to open remote file.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
/* This only works if the title and its tags are on one line */
if (preg_match ("@\<title\>(.*)\</title\>@i", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>
해당 서버에 권한이 있는 사용자로 접속할수 있다면 FTP를 이용해 파일에 작성할 수도 있다. 이 방법으로 새로운 파일만 생성할수 있다. 기존의 파일을 덮어쓰려고 하면, fopen() 호출시에 실패하게 될것이다.
'anonymous'가 아닌 사용자로 접속하려면, URL내에 username을 (필요하다면 password도) 다음과 같이 명시해야 한다 : 'ftp://user:password@ftp.example.com/path/to/file'. (또한 HTTP에서 Basic authentication을 사용한 인증을 요구하는 경우에도 이와 같은 문법을 사용할 수 있다.)
Example #2 원격 서버에 데이터 저장하기
<?php
$file = fopen ("ftp://ftp.php.net/incoming/outputfile", "w");
if (!$file) {
echo "<p>원격 파일을 쓰도록 열 수 없습니다.\n";
exit;
}
/* 여기에서 데이터를 씁니다. */
fwrite ($file, "$HTTP_USER_AGENT\n");
fclose ($file);
?>
Note: 위의 예제를 보고, 이 테크닉을 사용하여 remote log를 작성할 수 있겠다고 생각할 수도 있다. 그러나 불행하게도 원격 파일이 이미 존재하면 fopen() 호출은 실패할것이기 때문에 동작하지 않을것이다. 그와 같은 분산 log를 수행하려면 syslog()를 참고하도록 한다.