BLOG main image

분류 전체보기 (321)
free (36)
영화 (85)
드라마 (21)
게임 (28)
만화/책 (34)
개발 (46)
IT (68)
연예 (3)
Visitors up to today!
Today hit, Yesterday hit
TETRIS
rss
2011. 1. 10. 19:16
file_get_contents 나 get_headers 는 PHP 의 설정 중 allow_url_fopen = true 일 때만 사용 가능하다.
최근에는 보안상의 이유로 allow_url_fopen = false 상태로 해놓는 사이트가 많은데, 
fsockopen 을 이용해서 설정을 바꾸지 않고 동일한 기능을 사용할 수 있다.

get_web_data 는 file_get_contents 대신 사용 가능하고,
get_web_header 는 get_headers 대신 사용할 수 있다. (완전히 동일한 결과를 리턴한다)
  1. function get_web_data($url)  
  2. {  
  3.     $info = parse_url($url);  
  4.     $send = "POST " . $info["path"] . " HTTP/1.1\r\n"  
  5.         . "Host: " . $info["host"] . "\r\n"  
  6.         . "Content-type: application/x-www-form-urlencoded\r\n"  
  7.         . "Connection: close\r\n\r\n" ;  
  8.     $fp = fsockopen($info["host"], 80);  
  9.     fputs($fp$send);  
  10.    
  11.     $start = false;  
  12.     $raw_data = null;  
  13.    
  14.     while (!feof ($fp))   
  15.     {  
  16.         $tmp = fgets($fp, 1024);  
  17.         if ($start == true) $raw_data .= $tmp;  
  18.         if ($tmp == "\r\n"$start = true;  
  19.     }  
  20.     fclose($fp);  
  21.     return $raw_data;  
  22. }  
  23.   
  24. function get_web_header($url)  
  25. {  
  26.     $info = parse_url($url);  
  27.     $send = "GET " . $info["path"] . " HTTP/1.1\r\n";  
  28.     $send .= "Host: ".$info["host"]."\r\n";  
  29.     $send .= "Connection: Close\r\n\r\n";  
  30.               
  31.     $fp = fsockopen($info["host"], 80);  
  32.     fputs($fp$send);  
  33.    
  34.     $start = false;  
  35.     $header = array();  
  36.     $count = 0;  
  37.    
  38.     while (!feof ($fp))   
  39.     {  
  40.         $tmp = fgets($fp, 128);  
  41.         if ($start == true) break;  
  42.         else  
  43.         {  
  44.             if ($tmp != "\r\n")  
  45.             {  
  46.                 $header[$count] = $tmp;  
  47.                 $count++;  
  48.             }  
  49.         }  
  50.         if ($tmp == "\r\n"$start = true;  
  51.     }  
  52.     fclose($fp);  
  53.     return $header;  
  54. }  

위의 function 을 이용해서 원격 서버에 파일이 존재하는지 확인하는 함수를 만들 수 있다.
  1. function is_exist_remote_file($url)  
  2. {  
  3.     if (emptyempty($url) == true) return false;  
  4.     $value = $this->get_web_header($url);  
  5.     $pos = strpos($value[0], "200 OK");  
  6.     if ($pos > 0) return true;  
  7.     return false;  
  8. }