21. 장. Using remote files

여러분이 PHP를 설정할 때 "URL fopen wrapper"를 enable로 설정하였다면 (이 설정은 PHP 4.0.3 이하에서는 configure 스크립트에서 --disable-url-fopen-wrapper로 명시하지 하거나, 그 이후의 버전에서는 php.ini 파일에 allow_url_fopen을 off로 설정하지 않으면 설정된다.), 여러분은 파일이름을 파라메타로 가지는 대부분의 함수에 HTTP나 FTP URL을 파일이름으로 사용할 수 있다. 심지어 require()include() 함수에도 사용이 가능하다.

참고: 단, Windows환경의 require()include() 함수에서는 사용할 수 없다.

예를 들어, 이 기능을 사용하여 원격 웹 서버가 출력하는 내용을 파일로 열고, 그 출력 내용에서 원하는 데이타를 분석하여, 이 원하는 데이타로 데이타베이스 질의에 사용하거나, 웹 사이트에 맞는 모양으로 변형 시켜 출력할 수 있다

예 21-1. Getting the title of a remote page

<?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 (eregi ("<title>(.*)</title>", $line, $out)) {
        $title = $out[1];
        break;
    }
}
fclose($file);
?>

여러분은 해당 서버에 권한이 있는 사용자로 접속하고, 해당 파일이 존재하지 않는다면, FTP를 이용한 파일에 쓸 수도 있다. 'anonymous'가 아닌 사용자로 접속하려면, URL내에 username을 (필요하다면 password도) 다음과 같이 명시해야 한다 : 'ftp://user:password@ftp.example.com/path/to/file'. (또한 HTTP에서 Basic authentication을 사용한 인증을 요구하는 경우에도 이와 같은 문법을 사용할 수 있다.)

예 21-2. Storing data on a remote server

<?php
$file = fopen ("ftp://ftp.php.net/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Unable to open remote file for writing.\n";
    exit;
}
/* Write the data here. */
fputs ($file, "$HTTP_USER_AGENT\n");
fclose ($file);
?>

참고: 여러분은 위의 예제를 보고, 이 테크닉을 사용하여 remote log를 작성할 수 있겠다고 생각할 수도 있다. 그러나 위에 언급한대로 URL fopen() wrapper는 새 파일에만 쓸 수 있다. 여러분이 원하는 대로 분산된 log를 하고 싶다면 syslog()의 내용을 살펴보라.