[ php ] allow_url_fopen = off 일때 url파일읽기
페이지 정보
작성자 웹지기 댓글 0건 조회 7,012회 작성일 18-09-28 11:40본문
php.ini 파일에 allow_url_fopen=on으로 설정되어 있으면, URL 주소로 파일 읽어올 때 다음과 같이 처리
하지만 allow_url_fopen=off로 설정되어 있는 경우, 일단 php.ini 파일을 수정
그러나 웹호스팅을 하는 경우 php.ini 파일을 직접 수정할 수 없는 경우가 있다.
이런 경우의 해결책을 찾아보니 다음과 같이 socket을 이용해 URL주소를 읽어오는 방법
[code]
<?php
$url = "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"
. "Content-length: " . strlen($info["query"]) . "\r\n"
. "Connection: close\r\n\r\n" . $info["query"];
$fp = fsockopen($info[host], 80);
fputs($fp, $send);
$start = false;
$retVal = "";
while (!feof ($fp)) {
$tmp = fgets($fp, 1024);
if ($start == true) $retVal .= $tmp;
if ($tmp == "\r\n") $start = true;
}
fclose($fp);
echo($retVal);
?>
[/code]
추가적으로 GET 방식 호출은 다음과 같이 할 수도 있다.
[code]
<?php
$url = "URL 주소";
$info = parse_url($url);
$host = $info["host"];
$port = $info["port"];
if ($port == 0) $port = 80;
$path = $info["path"];
if ($info["query"] != "") $path .= "?" . $info["query"];
$out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
if (!$fp){
echo "$errstr ($errno) <br>\n";
}else {
fputs($fp, $out);
$start = false;
$retVal = "";
while(!feof($fp)) {
$tmp = fgets($fp, 1024);
if ($start == true) $retVal .= $tmp;
if ($tmp == "\r\n") $start = true;
}
fclose($fp);
echo $retVal;
}
?>
[/code]
기타 다른 방법으로는 .htaccess 파일을 이용하는 방법
.htaccess 파일에 다음과 같은 내용을 추가
[code]
php_flag allow_url_fopen 1
[/code]
하지만 위 방식보다는 fopen 대신 fsockopen을 이용하는게 나을 것 같다
댓글목록
등록된 댓글이 없습니다.