[ php ] allow_url_fopen = off 일때 url파일읽기 > php

본문 바로가기

사이트 내 전체검색

php

[ php ] allow_url_fopen = off 일때 url파일읽기

작성일 18-09-28 11:40

페이지 정보

작성자 웹지기 조회 7,017회 댓글 0건

본문

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을 이용하는게 나을 것 같다


추천0

비추천 0

댓글목록

등록된 댓글이 없습니다.

전체 82건 1 페이지

이미지 목록

게시물 검색
Copyright © 즐거운 코딩 생활 ( funyphp ). All rights reserved.
PC 버전으로 보기