원격 파일 사용하기

php.ini에서 allow_url_fopen이 활성화되어 있으면 파일 이름을 매개변수로 사용하는 대부분의 함수에서 HTTPFTP URL을 사용할 수 있습니다. 또한 URL은 include, include_once, requirerequire_once 문과 함께 사용할 수 있습니다(이에 대해 allow_url_include가 활성화되어야 함). PHP에서 지원하는 프로토콜에 대한 자세한 내용은 지원되는 프로토콜 및 래퍼를 참조하세요.

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

Example #1 원격 페이지의 제목을 가져오기

                  
<?php
$file = fopen ("http://www.example.com/", "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.example.com/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Unable to open remote file for writing.\n";
    exit;
}
/* Write the data here. */
fwrite ($file, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($file);
?>
                  
                
메모:

위의 예에서 이 기술을 사용하여 원격 로그 파일에 쓸 수 있다는 아이디어를 얻을 수 있습니다. 불행히도 원격 파일이 이미 존재하는 경우 fopen() 호출이 실패하기 때문에 작동하지 않습니다. 이와 같은 분산 로깅을 하려면 syslog()를 살펴봐야 합니다.