php.ini 에서 allow_url_fopen 을 On으로 활성화하면 HTTP 나 FTP 를 통해 파일을 작성하거나 읽어 올 수 있습니다. HTTP 인 경우 include, include_once, require, require_once 를 사용할 수 있고, FTP 는 fopen 으로 접속이 가능합니다.

FTP 접속은 "ftp://아이디:패스워드@도메인" 형식으로 접속이 가능하지만 동일한 파일이 이미 있을 경우 fopen() 함수를 호출하지 못합니다.

<php
 // (ex #1
 if($file = @fopen("ftp://user_id:user_passwd@example.com/public_html/test.php", "w"))
 {
   // 여기에서 데이터를 씁니다.
    fwrite($file, "원격 파일 쓰기<br />\n");
    fclose($file);
 } else {
    echo "<p>원격 파일을 쓰도록 열 수 없습니다.\n";
    exit;
 }
 // 결과: 원격 파일 쓰기<br />\n

 // 이미 (ex #1 에서 test.php파일을 작성하였으므로 (ex #2 는 원격파일 작성에 실패합니다.
 // (ex #2
 if($file = @fopen("ftp://user_id:user_passwd@example.com/public_html/test.php", "w"))
 {
   // 여기에서 데이터를 씁니다.
   fwrite ($file, "원격 파일 쓰기<br />\n");
   fclose ($file);
 } else {
   echo "<p>원격 파일을 쓰도록 열 수 없습니다.\n";
   exit;
 }

 /*
 결과:
 Warning: fopen(ftp://...@example.com/public_html/test.php) 
[function.fopen]: failed to open stream: Remote file already exists
 and overwrite context option not specified
 <br /> FTP server reports  213 49 in C:\Server\public_html\test.php 
on line 4
 */
 ?>

원격 접속시 동일 파일이 존재하면 덮어 쓰기는 안 되자만 데이터 추가는 가능합니다. 

<?php
 if($file = @fopen(ftp://user_id:user_passwd@example.com/public_html/test.php, "a"))
 {
   // 여기에서 데이터를 씁니다.
   fwrite ($file, "원격 파일 쓰기<br />\n");
   fclose ($file);
 } else {
   echo "<p>원격 파일을 쓰도록 열 수 없습니다.\n";
   exit;
 }
 // 결과: 원격 파일 쓰기<br />\n원격 파일 쓰기<br />\n

 ?>

원격 접속시 읽어 오기도 가능합니다. 

<?php
 if($file = @fopen(ftp://user_id:user_passwd@example.com/public_html/test.php, "r"))
 {
   // 여기에서 데이터를 읽어 옵니다.
   while(!feof($fp))
   {
     $file .= fread($fp,1024);
   }
   fclose ($fp);
 } else {
   echo "<p>원격 파일을 열 수 없습니다.\n";
   exit;
 }
 echo $file;
 // 결과: 원격 파일 쓰기<br />\n원격 파일 쓰기<br />\n

 ?>

간단하게 원격 파일 접속에 대해 설명하였지만 가능하면 allow_url_fopen 을 활성화하는 것을 권하지 않습니다.

0 댓글