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 대신 사용할 수 있다. (완전히 동일한 결과를 리턴한다)
- function get_web_data($url)
- {
- $info = parse_url($url);
- $send = "POST " . $info["path"] . " HTTP/1.1\r\n"
- . "Host: " . $info["host"] . "\r\n"
- . "Content-type: application/x-www-form-urlencoded\r\n"
- . "Connection: close\r\n\r\n" ;
- $fp = fsockopen($info["host"], 80);
- fputs($fp, $send);
- $start = false;
- $raw_data = null;
- while (!feof ($fp))
- {
- $tmp = fgets($fp, 1024);
- if ($start == true) $raw_data .= $tmp;
- if ($tmp == "\r\n") $start = true;
- }
- fclose($fp);
- return $raw_data;
- }
- function get_web_header($url)
- {
- $info = parse_url($url);
- $send = "GET " . $info["path"] . " HTTP/1.1\r\n";
- $send .= "Host: ".$info["host"]."\r\n";
- $send .= "Connection: Close\r\n\r\n";
- $fp = fsockopen($info["host"], 80);
- fputs($fp, $send);
- $start = false;
- $header = array();
- $count = 0;
- while (!feof ($fp))
- {
- $tmp = fgets($fp, 128);
- if ($start == true) break;
- else
- {
- if ($tmp != "\r\n")
- {
- $header[$count] = $tmp;
- $count++;
- }
- }
- if ($tmp == "\r\n") $start = true;
- }
- fclose($fp);
- return $header;
- }
위의 function 을 이용해서 원격 서버에 파일이 존재하는지 확인하는 함수를 만들 수 있다.
- function is_exist_remote_file($url)
- {
- if (emptyempty($url) == true) return false;
- $value = $this->get_web_header($url);
- $pos = strpos($value[0], "200 OK");
- if ($pos > 0) return true;
- return false;
- }
'개발 > 언어' 카테고리의 다른 글
python 3.6 으로 변경 (0) | 2018.04.10 |
---|---|
C++ 을 빛내는 boost 라이브러리, 약간의 아쉬움. (7) | 2012.03.22 |
실행파일(exe)의 icon 변경 (ico, exe) (0) | 2010.11.09 |
어셈블러는 배울 가치가 있을까? (2) | 2008.01.10 |
GMail 제목 UTF-8 문제 해결 (파이썬 코드) (2) | 2007.03.15 |