allow_url_fopen off 환경에서 꼭 구현해보고 싶은 기능이있습니다. 정보
allow_url_fopen off 환경에서 꼭 구현해보고 싶은 기능이있습니다.관련링크
http://gnusr.com/g4/?ca_id=test
307회 연결
본문
원글) 주화면의 최신글을 preload로 빠르게...
http://www.sir.co.kr/bbs/tb.php/g4_tiptech/812
아래와 같은 기능으로 요약되는 소스코드의 일부입니다.
*게시물 쓰기, 수정, 삭제 이벤트가 있는 경우에만 인덱스 페이지에 사용될 일반 html파일을 생성한다.
*방문자가 인덱스 페이지에 접속할때는 위에서 생성된 html 파일을 인클루드 시켜 보여준다.
*인덱스 페이지를 다수의 게시판, 다수의 최신글 목록을 가져오도록 구성한 경우(최신글등)에도 실시간으로 디비를 긁어오는것이 아닌 이미 작성된 html문서를 보여주는 것이므로 속도가 보장된다.
- 나아가 자동메뉴 개념의 직접적인 디비접속을 통한 메뉴 구성형태의 페이지에도 유용할것 같다.
*실질적으로 새글, 코멘트, 수정등의 작업이 있을때만 인덱스 페이지가 갱신되므로 디비의 부하를 줄여준다.
- 부라우저 에서 해석완료된 문서를 저장했다 보여주는 것과 비슷한 개념으로 이해된다.
- 랜덤을 사용하는 부분을 제외하고 최신글과 메뉴 부분에 적용하면 매우 유용하겠다.
- 원하는 페이지 전체 혹은 일부에 적용가능함.
적용해보는 과정에서 서버의 allow_url_fopen 옵션이 Off 로 세팅된 경우 아래 소스를 사용할 수 없다는 것을 알았습니다.
나스카님과 택와이드님의 글들을 보고 링크도 따라가 봤으나 초보에게는 많이 어렵습니다.
소켓을 쓰면 가능하다는데
아래 소스를 소켓을 사용하는 형태로 바꿔주는 방법을 알고 싶습니다.
이 기능 관련팁텍의 전체 내용은 맨위 원글 링크을 참조하세요.
<?
ini_set("allow_url_fopen","1");
function readURL($url) {
$fp = fopen($url,"rb");
$file = $fp;
settype($file, boolean);
if ($file) {
while (!feof($fp)) {
$tmp = fgets($fp, 1024);
$temp .= $tmp;
}
fclose($fp);
} else {
$temp = "";
}
return $temp;
}
$url = "URL/preload/preload_in.php";
$data = readURL($url);
$fn = "URL/preload/preload_out.php";
$fd = fopen($fn, "w");
fwrite($fd, $data);
fclose($fd);
//ini_set("allow_url_fopen","0");
?>
http://www.sir.co.kr/bbs/tb.php/g4_tiptech/812
아래와 같은 기능으로 요약되는 소스코드의 일부입니다.
*게시물 쓰기, 수정, 삭제 이벤트가 있는 경우에만 인덱스 페이지에 사용될 일반 html파일을 생성한다.
*방문자가 인덱스 페이지에 접속할때는 위에서 생성된 html 파일을 인클루드 시켜 보여준다.
*인덱스 페이지를 다수의 게시판, 다수의 최신글 목록을 가져오도록 구성한 경우(최신글등)에도 실시간으로 디비를 긁어오는것이 아닌 이미 작성된 html문서를 보여주는 것이므로 속도가 보장된다.
- 나아가 자동메뉴 개념의 직접적인 디비접속을 통한 메뉴 구성형태의 페이지에도 유용할것 같다.
*실질적으로 새글, 코멘트, 수정등의 작업이 있을때만 인덱스 페이지가 갱신되므로 디비의 부하를 줄여준다.
- 부라우저 에서 해석완료된 문서를 저장했다 보여주는 것과 비슷한 개념으로 이해된다.
- 랜덤을 사용하는 부분을 제외하고 최신글과 메뉴 부분에 적용하면 매우 유용하겠다.
- 원하는 페이지 전체 혹은 일부에 적용가능함.
적용해보는 과정에서 서버의 allow_url_fopen 옵션이 Off 로 세팅된 경우 아래 소스를 사용할 수 없다는 것을 알았습니다.
나스카님과 택와이드님의 글들을 보고 링크도 따라가 봤으나 초보에게는 많이 어렵습니다.
소켓을 쓰면 가능하다는데
아래 소스를 소켓을 사용하는 형태로 바꿔주는 방법을 알고 싶습니다.
이 기능 관련팁텍의 전체 내용은 맨위 원글 링크을 참조하세요.
<?
ini_set("allow_url_fopen","1");
function readURL($url) {
$fp = fopen($url,"rb");
$file = $fp;
settype($file, boolean);
if ($file) {
while (!feof($fp)) {
$tmp = fgets($fp, 1024);
$temp .= $tmp;
}
fclose($fp);
} else {
$temp = "";
}
return $temp;
}
$url = "URL/preload/preload_in.php";
$data = readURL($url);
$fn = "URL/preload/preload_out.php";
$fd = fopen($fn, "w");
fwrite($fd, $data);
fclose($fd);
//ini_set("allow_url_fopen","0");
?>
댓글 전체
fopen 사용시 인수를 http:// 로 시작하지 않으면 allow_url_fopen off 의 영향을 안받아요..
즉 http://로 시작하면 http 연결로 열리고, ftp://로 지정하면 ftp 연결로 열리죠.. include 사용하는 것처럼 경로와 화일명을 지정하면 화일 시스템으로 열려서 allow_url_fopen off 와 상관이 없어요..
fopen 함수의 사용자체를 막은게 아니라면 $fn 부분에서 http://로 시작하지 마시고 디렉토리 경로로 적어주시면 해결될 문제네요..
즉 http://로 시작하면 http 연결로 열리고, ftp://로 지정하면 ftp 연결로 열리죠.. include 사용하는 것처럼 경로와 화일명을 지정하면 화일 시스템으로 열려서 allow_url_fopen off 와 상관이 없어요..
fopen 함수의 사용자체를 막은게 아니라면 $fn 부분에서 http://로 시작하지 마시고 디렉토리 경로로 적어주시면 해결될 문제네요..
답변 감사합니다.
해뜰녘님 말씀대로 하면 에러는 없습니다만,
preload_in.php의 실행 결과값이 아닌 소스내용그대로 preload_out.php 파일에 복사됩니다.
즉 $url 값은 http://~로 접근해야 하는데 그럴경우
fopen(): URL file-access is disabled in the server configuration in /web2~ 관련 에러가 있습니다.
http://sir.co.kr/bbs/tb.php/cm_free/61137 에 보면
택와이드님 말씀가운데 'php4.3.4 부터 PHP 4.3.4 부터 ini_set으로 설정이 않되게 했답니다.' 는 내용도 있더군요.
위 소스가 원래 의도하는 바,
preload_in.php를 http://로 호출 실행시킨후 그 결과값인 일반 html파일을
preload_out.php에 복사해주어 사용자 접근시에 미리 복사된 html을 보여주려는 것입니다.
예를 들어 preload_in.php에는
<?=latest("mon_latest_cat", work, 10, 50);?>
처럼 몇개의 최신글을 불러들이는 구문을 넣을것이며
원글에서 말씀드린대로 쓰기, 수정, 삭제 등의 이벤트가 있을때에만
preload_in.php를 한번씩 호출해서 그 결과값을 preload_out.php에 일반 html코드로 복사해주려는 것입니다.
관심을 가져주셔서 감사드리며,
힌트라도 주시면 고맙겠습니다.
해뜰녘님 말씀대로 하면 에러는 없습니다만,
preload_in.php의 실행 결과값이 아닌 소스내용그대로 preload_out.php 파일에 복사됩니다.
즉 $url 값은 http://~로 접근해야 하는데 그럴경우
fopen(): URL file-access is disabled in the server configuration in /web2~ 관련 에러가 있습니다.
http://sir.co.kr/bbs/tb.php/cm_free/61137 에 보면
택와이드님 말씀가운데 'php4.3.4 부터 PHP 4.3.4 부터 ini_set으로 설정이 않되게 했답니다.' 는 내용도 있더군요.
위 소스가 원래 의도하는 바,
preload_in.php를 http://로 호출 실행시킨후 그 결과값인 일반 html파일을
preload_out.php에 복사해주어 사용자 접근시에 미리 복사된 html을 보여주려는 것입니다.
예를 들어 preload_in.php에는
<?=latest("mon_latest_cat", work, 10, 50);?>
처럼 몇개의 최신글을 불러들이는 구문을 넣을것이며
원글에서 말씀드린대로 쓰기, 수정, 삭제 등의 이벤트가 있을때에만
preload_in.php를 한번씩 호출해서 그 결과값을 preload_out.php에 일반 html코드로 복사해주려는 것입니다.
관심을 가져주셔서 감사드리며,
힌트라도 주시면 고맙겠습니다.
- 다른 계정 allow_url_fopen on on 에서 테스트 결과 -
$url은 http://~ 방식의 접근해서 실행 하고,
$fn은 절대경로로 잡아준 경우 해당 파일에 결과값이 정상적으로 입력됩니다.
(입력 문서 내부의 세세한 경로가 일치하는 것은 아니지만 결과값이 html형식으로 입력됨)
좀더 찬찬히 봐야할 것 같습니다.
allow_url_fopen off 환경에서 동작할 수 있는 소켓방식의 구현 방법을 검색하고 있으나 여의치 않군요.
또한 일반적인 관심 분야가 아니라서 자료를 찾는데 어려움이 많습니다.
도움 부탁드립니다.
$url은 http://~ 방식의 접근해서 실행 하고,
$fn은 절대경로로 잡아준 경우 해당 파일에 결과값이 정상적으로 입력됩니다.
(입력 문서 내부의 세세한 경로가 일치하는 것은 아니지만 결과값이 html형식으로 입력됨)
좀더 찬찬히 봐야할 것 같습니다.
allow_url_fopen off 환경에서 동작할 수 있는 소켓방식의 구현 방법을 검색하고 있으나 여의치 않군요.
또한 일반적인 관심 분야가 아니라서 자료를 찾는데 어려움이 많습니다.
도움 부탁드립니다.
플록님...
전체 소스를 몰라서 가지고 계신 소스를 기준으로는 말씀 못드리겠습니다.
대신 제가 사용하는 방법은 html 출력 결과가 필요하다면
ob_strart() ob_get_contents() ob_end_clean() 등의 출력 버퍼 관련 함수를 사용합니다.
이미 그누보드4에도 사용되고 있죠..
예를 들어 플록님의 현재 소스를 유지하면서 해결한다면
readURL 함수에서 return $temp; 전에 다음을 추가해 보세요.
ob_start();
echo $temp;
$temp=ob_get_contents();
ob_end_clean();
그리고 readURL 인수는 제가 말한대로 화일의 경로로 입력하시면 해당 화일의 실행결과물(html 화일)을 얻을 수 있습니다.
fopen 으로 해당 스크립트의 실행결과물을 얻어오는데 굳이 http 접속을 해서 얻어올 필요가 없다고 보여지네요.
다른 서버의 내용이라면 어쩔수 없지만요..
전체 소스를 몰라서 가지고 계신 소스를 기준으로는 말씀 못드리겠습니다.
대신 제가 사용하는 방법은 html 출력 결과가 필요하다면
ob_strart() ob_get_contents() ob_end_clean() 등의 출력 버퍼 관련 함수를 사용합니다.
이미 그누보드4에도 사용되고 있죠..
예를 들어 플록님의 현재 소스를 유지하면서 해결한다면
readURL 함수에서 return $temp; 전에 다음을 추가해 보세요.
ob_start();
echo $temp;
$temp=ob_get_contents();
ob_end_clean();
그리고 readURL 인수는 제가 말한대로 화일의 경로로 입력하시면 해당 화일의 실행결과물(html 화일)을 얻을 수 있습니다.
fopen 으로 해당 스크립트의 실행결과물을 얻어오는데 굳이 http 접속을 해서 얻어올 필요가 없다고 보여지네요.
다른 서버의 내용이라면 어쩔수 없지만요..
해뜰녘님 친절한 답변 감사드립니다.
테스트 결과 해뜰녘님께서 말씀하신 - 실행결과물(html 화일)을 얻는데 실패하고 있습니다.
죄송하지만 한번더 검토해 주시면 고맙겠습니다.
-------------------------------------------------
allow_url_fopen off off 환경에 한정해서 질문 드리겠습니다.
아래 소스코드가 hanpedro님께서 소개한 preload_exec.php 전체내용 입니다.
이 파일을 G4/bbs 하위 write.php, write_update.php등 쓰기,수정,삭제,코멘트등 관련파일에
다음과 같이 include 해주었습니다.
include_once ("../preload/preload_exec.php"); // 권장위치 각파일 맨 아래부분 goto_url("./board.php?bo_table~ 바로 위쯤
<?
//주석은 에러내용 혹은 검색을 통해 얻은 내용들입니다
ini_set("allow_url_fopen","1"); //php4.3.4이후 적용안됨(택와이드님)
function readURL($url) {
$fp = fopen($url,"rb"); // 이 라인(4)에서 에러 $url = "http://~ 접근시
$file = $fp;
settype($file, boolean);
if ($file) {
while (!feof($fp)) {
$tmp = fgets($fp, 1024);
$temp .= $tmp;
}
fclose($fp);
} else {
$temp = "";
}
//해뜰녘님 권장소스 - $url 절대 경로로 해주고 테스트
ob_start();
echo $temp;
$temp=ob_get_contents();
ob_end_clean();
// 끝
return $temp;
}
//$url = "http://domain/g4/preload/preload_in.php"; // 위 에러발생
$url = "/web2/home/gnusr/g4/preload/preload_in.php"; // 호출 실행될 php파일
//파일내용<?=latest("mon_latest_cat", work, 10, 50);?> 최신글 불러오기 달랑 하나로 테스트
$data = readURL($url);
$fn = "/web2/home/gnusr/g4/preload/preload_out.php";//결과값이 html로 저장될 파일
$fd = fopen($fn, "w");
fwrite($fd, $data);
fclose($fd);
//ini_set("allow_url_fopen","0");//닫기
?>
*쓰기,수정등 위 이벤트가 일어날때에만 preload_in.php 를 실행시켜 preload_out.php 에 일반html문서 형태로 저장해주는 것으로 이해하고 있습니다.
*실제 allow_url_fopen on on 환경에서 $url 부분만 $url = "http://domain/g4/preload/preload_in.php"; 방식으로 수정 원하는 결과를 얻었습니다.
**현재 allow_url_fopen off off 환경에서 에러 및 문제점
$url = "/web2/home/gnusr/g4/preload/preload_in.php"; 처럼 경로로 설정할 경우
preload_in.php 실행 결과값이 아닌 preload_in.php파일 내용이 preload_out.php에 그대로 복사됩니다.
$url = "http://domain/g4/preload/preload_in.php"; 처럼 설정할 경우
//Warning: fopen(): URL file-access is disabled in the server configuration in /web2/home/gnusr/g4/preload/preload_exec.php on line 4
//Warning: fopen(http://domain/g4/preload/preload_in.php): failed to open stream: no suitable wrapper could be found in /web2/home/gnusr/g4/preload/preload_exec.php on line 4
여타 퍼미션이나 경로에 대한 오류는 없는 것으로 보입니다.
관심을 가져주셔서 감사합니다.
감기조심하세요.
테스트 결과 해뜰녘님께서 말씀하신 - 실행결과물(html 화일)을 얻는데 실패하고 있습니다.
죄송하지만 한번더 검토해 주시면 고맙겠습니다.
-------------------------------------------------
allow_url_fopen off off 환경에 한정해서 질문 드리겠습니다.
아래 소스코드가 hanpedro님께서 소개한 preload_exec.php 전체내용 입니다.
이 파일을 G4/bbs 하위 write.php, write_update.php등 쓰기,수정,삭제,코멘트등 관련파일에
다음과 같이 include 해주었습니다.
include_once ("../preload/preload_exec.php"); // 권장위치 각파일 맨 아래부분 goto_url("./board.php?bo_table~ 바로 위쯤
<?
//주석은 에러내용 혹은 검색을 통해 얻은 내용들입니다
ini_set("allow_url_fopen","1"); //php4.3.4이후 적용안됨(택와이드님)
function readURL($url) {
$fp = fopen($url,"rb"); // 이 라인(4)에서 에러 $url = "http://~ 접근시
$file = $fp;
settype($file, boolean);
if ($file) {
while (!feof($fp)) {
$tmp = fgets($fp, 1024);
$temp .= $tmp;
}
fclose($fp);
} else {
$temp = "";
}
//해뜰녘님 권장소스 - $url 절대 경로로 해주고 테스트
ob_start();
echo $temp;
$temp=ob_get_contents();
ob_end_clean();
// 끝
return $temp;
}
//$url = "http://domain/g4/preload/preload_in.php"; // 위 에러발생
$url = "/web2/home/gnusr/g4/preload/preload_in.php"; // 호출 실행될 php파일
//파일내용<?=latest("mon_latest_cat", work, 10, 50);?> 최신글 불러오기 달랑 하나로 테스트
$data = readURL($url);
$fn = "/web2/home/gnusr/g4/preload/preload_out.php";//결과값이 html로 저장될 파일
$fd = fopen($fn, "w");
fwrite($fd, $data);
fclose($fd);
//ini_set("allow_url_fopen","0");//닫기
?>
*쓰기,수정등 위 이벤트가 일어날때에만 preload_in.php 를 실행시켜 preload_out.php 에 일반html문서 형태로 저장해주는 것으로 이해하고 있습니다.
*실제 allow_url_fopen on on 환경에서 $url 부분만 $url = "http://domain/g4/preload/preload_in.php"; 방식으로 수정 원하는 결과를 얻었습니다.
**현재 allow_url_fopen off off 환경에서 에러 및 문제점
$url = "/web2/home/gnusr/g4/preload/preload_in.php"; 처럼 경로로 설정할 경우
preload_in.php 실행 결과값이 아닌 preload_in.php파일 내용이 preload_out.php에 그대로 복사됩니다.
$url = "http://domain/g4/preload/preload_in.php"; 처럼 설정할 경우
//Warning: fopen(): URL file-access is disabled in the server configuration in /web2/home/gnusr/g4/preload/preload_exec.php on line 4
//Warning: fopen(http://domain/g4/preload/preload_in.php): failed to open stream: no suitable wrapper could be found in /web2/home/gnusr/g4/preload/preload_exec.php on line 4
여타 퍼미션이나 경로에 대한 오류는 없는 것으로 보입니다.
관심을 가져주셔서 감사합니다.
감기조심하세요.