세이박스

file_get_contents() Warning 오류 해결 방법

웹프로그램
웹호스팅을 이용할 경우 php.ini 수정이 어려운 경우가 있습니다.
특히 외부의 파일을 가져올 경우 allow_url_fopen = 0; 일 경우 1로 수정 해줘야 하지만, 보안상 막아둔 경우 서버를 공용으로 사용하므로 수정을 해주지 않습니다.
저의 경우 cafe24 호스팅을 주로 이용하는데 이곳 역시 allow_url_fopen = 0 으로 되어 있어서 fopen(), file(), file_get_contents() 함수로 외부 URL 을 읽어 들이기가 안됩니다.
 
Warning: file_get_contents() URL file-access is disabled in the server configuration in
 
하지만, 오류를 해결하는 방법으로 외부 파일을 읽어 들이는 함수 이용전에 다음과 같이 ini 설정을 임시로 변경해서 사용하면 됩니다.
 
@ini_set("allow_url_fopen","1");
 
ini_set() 를 사용해서 해당 페이지에서 일시적으로 allow_url_fopen을 1로 적용해서 이용할 수 있습니다.
 
하지만, allow_url_fopen 이용시 보안상 취약합니다.
아래 cafe24 호스팅 업체로 부터 답변 받은 내용 입니다.
 
최근 발생하고 있는 홈페이지 변조나, 피싱 사이트로의 악용은 대부분 게시판의 취약점이나, php 의 취약점에 의해 발생되고 있습니다. 이중에 가장 빈번한 것이 php 의 외부 사이트 소스 실행 기능 (allow_url_fopen)으로 악의적인 프로그램이 실행되어져서 발생이 되고 있습니다.
이러한 문제로 인하여 한국정보보호진흥원에서는 allow_url_fopen 을 허용하지 않기를 권고 하고 있습니다.
allow_url_fopen 을 허용하게 되면 보안적으로 심각한 문제를 초래 할 수 있습니다.
해당 기능을 켜두게 되면, 원격에서 프로그램을 웹사이트에 삽입하여 실행(PHP injection), 대량으로 웹사이트를 변조 할 수 있게 되므로 어느날 갑자기, 홈페이지 화일이 통채로 지워지거나, 데이터베이스 내용이 모두 사라질수도 있습니다.
 
관련 내용 URL :
 
저희 카페24에서는 기본적으로 해당 기능이 모두 off 로 설정이 되어 있으며, 따라서 고객님께서는 가급적 allow_url_fopen 기능이외에 다른 방법으로 구현을 하시거나, 아래의 예시와 같은 function 을 만들어서 사용하시는 것을 권고합니다. (HttpRequest, http_get, fsockopen 등의 함수로 구현이 가능합니다.)
(allow_url_fopen 기능이란 php 에서 include 를 사용할때 URL 방식으로 파일을 include 할수 있도록 해주는 기능입니다.)
 
(해당 내용이 이해가 되지 않거나, 보안의 위험성을 감수하더라도 반드시 allow_url_fopen 을 사용하셔야 한다면, 고객센터로 연락을 주시면 친절히 상담해 드립니다.)
 
-----------------------------------------------------------------------------------------
function get_url_fsockopen( $url ) {
     $URL_parsed = parse_url($url);
     $host = $URL_parsed["host"];
     $port = $URL_parsed["port"];
     if ($port==0)
          $port = 80;
     $path = $URL_parsed["path"];
     if ($URL_parsed["query"] != "")
          $path .= "?".$URL_parsed["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);
          $body = false;
          while (!feof($fp)) {
          $s = fgets($fp, 128);
          if ( $body )
               $in .= $s;
          if ( $s == "\\r\\n" )
               $body = true;
          }
          fclose($fp);
          echo $in;
     }
}
-----------------------------------------------------------------------------------------
 
위 함수로도 동작 잘 되는군요.
 
 

Warning: Cannot modify header information - headers already sent by 오류 해결 방법

웹프로그램
그누보드 및 제로보드 게시판 이용시 다음과 같은 오류 발생할 경우가 있다.

Warning: Cannot modify header information - headers already sent by (output started at /home/public_html/bbs/_head.php:2)

이와같은 오류는 이미지 Header를 출력 했기 때문에 수정할 수 없다라고 합니다.
논리적 오류로써 header 함수가 호출되기 전에 공백또는 문자 등이 이미 사용자에게 열려 있다는 의미입니다.

즉, 오류 페이지와 연관된 모든 페이지들을 확인해서 헤드 및 세션 처리 이전에 출력된 문자나 공백이 없는지 체크 해서 제거 해주면 되겠지만, 소스가 워낙 복잡한 경우 찾기가 쉽지가 않죠.
이때 소스 맨 상단에 ob_start(); 함수를 선언해주면 PHP4이상의 경우 output buffering을 기능을 사용할 수 있어 더이상 Warning 메시지가 나타나지 않습니다.

이와 같은 처리 단점?은 모든 PHP 스크립트 처리를 메모리 버퍼에 담아두었다가 한꺼번에 출력하게 되므로 페이지를 보여주는데 늦어지는 느낌이 날수도 있으며 ob_start()를 중복 사용시 또다른 오류가 발생할 수도 있습니다.

그누보드에서 적용하기 적당한 위치는 /index.php 파일의 맨 상단에 적용 하시면 됩니다.

<?
ob_start();

define("_MW_INDEX_", TRUE); // index 파일
....



 ▶ 최신영화, 최신 미국드라마 무료 다운로드...

WARNING: Actions on button or MovieClip instances are not supported in ActionScript 3.0. All scripts on object instances will be ignored.

디자인
플래시 CS5 에서 FLV 동영상 작업을 동작시 이상없이 잘되었으나 버튼 기능을 추가 한 뒤 부터 아래와 같은 오류가 발생하더군요.

WARNING: Actions on button or MovieClip instances are not supported in Actionscript 3.0. All scripts on object instances will be ignored.

원인은 버튼 함수 버전 문제 이더군요.
flv 동영상 플레이어는 Action script 3.0에서만 동작해서 3.0으로 제작했는데 문제는 버튼 action script가 3.0에서는 동작하지 않다는 것입니다.

그래서 버튼 영역을 별도의 플래시로 분리해서 FLV 동영상 플래시는 Actionscript3.0으로 제작하고 버튼 플래시는 Actionscript 2.0으로 제작해서 해결 하였습니다.


 ▶ 최신영화, 최신 미국드라마 무료 다운로드...