테스트 사이트 - 개발 중인 베타 버전입니다

쿼리없는 빠른 인덱스 페이지 만들기 - fsockopen

· 19년 전 · 9257 · 18
사실상 나스카님과 해뜰녘님의 팁을 정리해서 올리는것 으로 보시면 틀림없을듯 합니다.
요사이 나스카님의 말씀도 있고해서 정리에 대한 강박을 뒤로하고 일단 올려봅니다.
간단한 내용일지 모르겠으나 이런 형태의 구현방법을 찾지 못했고,
단 한 분이라도 필요한 분이 계시다면 충분할것 같습니다.
고수님들께서 보시고 낳은 방법이 있다면 알려주시면 고맙겠습니다.

*글 제목을 상기하시고 아래 과정을 잠간 보시면 무슨일을 하려는지 쉽게 아실 수 있을것입니다.

시작 http://www.sir.co.kr/bbs/tb.php/g4_tiptech/812
과정1 http://www.sir.co.kr/bbs/tb.php/g4_qa/10119
과정2 http://www.sir.co.kr/bbs/tb.php/g4_qa/10352

# 소켓 방식으로의 구현 - 나스카님과 해뜰녘님께서 도와 주셨습니다.
## allow_url_fopen off off 서버환경에서 fsockopen 을 사용한다.
적용예 http://gnusr.com/g4/?ca_id=test
피드백 http://gnusr.com/g4/bbs/tb.php/forum/79

((예제))
################################ 1 ##############################
http://gnusr.com/g4/preload/sock_preload_in.php
-------------------------------
sock_preload_in.php 화일 만들기
-------------------------------
<?
$g4_path = "..";
include_once("$g4_path/common.php");
include_once("$g4[path]/lib/latest.lib.php");
//테스트를 위해 단 하나의 최신글을 불러오는 구문을 작성했다
?>
<?=latest("basic", future, 5, 50);?>

################################ 2 ##############################
http://gnusr.com/g4/preload/sock_preload_exec.php
----------------------------------
sock_preload_exec.php 화일 만들기
----------------------------------
<?//나스카님 소켓 펑션
function geturl($host,$path) {
$contents="";
$fp = @fsockopen($host, 80, &$errno, &$errstr, 5);
if($fp) {
// 소켓을 이용해서 서버에 html 형태로 테이타를 보냄
fputs ($fp, "GET $path HTTP/1.0\nUser-Agent: Mozilla/4.0\nHost: $host\n\n");

while(!feof($fp)) {
$contents .= fgets($fp,1024);
}
fclose($fp);

return $contents;
}
}
//타 계정 임의의 파일 지정가능 (테스트를 위해 같은 계정내 파일을 지정함)
$htmls=geturl("gnusr.com","/g4/preload/sock_preload_in.php");//실행시킬 파일 지정
//해뜰녘님 헤더자르기
$htmls = trim(substr($htmls,strpos($htmls, "\r\n\r\n")));

echo $htmls;//실제 적용시에는 보여줄 필요가 없으며 주석처리해야한다

//해뜰녘님 결과값 저장
$fp=fopen('/web2/gnusr/www.gnusr.com/g4/preload/sock_preload_out.php','w');
fputs($fp,$htmls);
fclose($fp);
?>

################################ 3 ##############################
http://gnusr.com/g4/preload/sock_preload_out.php
--------------------------------
sock_preload_out.php 화일 만들기
--------------------------------
빈 화일 만들고 퍼미션 707로 설정해준다.

############################### 응용 ##############################

## 1,2,3번의 링크된 경로를 확인해보면 세개의 결과가 똑같아 보인다.

# 1번의 경우는 구문에 따라 실행된것
# 2번의 경우는 1번화일을 소켓으로 읽어들인후 헤더를 잘라내고 나머지 본문을 보여주는것
# 3번의 경우는 2번화일이 호출될때 1번화일의 결과값을 html로 저장해둔것을 보여주는것

> 속도는 3 >1 >2 와 같을것이고,
> 이것을 다수의 최신글이나 디비쿼리를 동반하는 카테고리 메뉴등이 집합된 메인페이지에 적용하려는 것이다.

>> 간단한 응용방법
>> bbs폴더의 코멘트를 포함한 쓰기,수정,삭제등을 담당하는 화일을 열어'// 사용자 코드 실행'을 검색후
>> 바로 아래줄에 2번 화일을 인클루드 한다.
>> // 사용자 코드 실행
>> @include_once ("../../preload/_preload_exec.php"); // 경로수정

>> 메인 페이지의 원하는 부분에 3번 화일을 인클루드 한다.

>>> 결국 방문자의 메인 페이지 접근시 미리 저장된 3번 화일의 내용을 쿼리없이 빠르게 보여주며,
>>> 게시물의 실질적 내용이 바뀌는 이벤트가 일어날때에만 3번 화일의 내용을 갱신해주는 것이다.


# 추가로 allow_url_fopen on on 환경이라면 fopen 방식을 사용해도 된다.
<?
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 = "http://~/preload_in.php";
$data = readURL($url);

$fn = "http://~/preload_out.php";
$fd = fopen($fn, "w");
fwrite($fd, $data);
fclose($fd);
ini_set("allow_url_fopen","0");
?>

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 18개

추억만들기
19년 전
원래 이넘은 표준말 밖에 모른다고 전해드리랍니다......

아무것도 모르는 상태라 헤롱합니다......^^

일단 배움의 모드로 가야할 것 같습니다.....

행복한 오후 되십시오~~~홍홍~*
좋은팁 잘보고 갑니다~!
정말 좋은팁이네요^^
좋은 팁인데... 읽어도 읽어도 이해가 안가네요. -..-a
dsd
워워.. 그냥 읽어오는게 더 빨라버리네요..
서버사양은 좋은데 서버 트래픽이 많아서 그런것 같네요..
아주 잘됩니다.. 근데 속도가 ㅜ.ㅜ;; 이일을 우야하지..
음냐리~ 당장 적용할 일은 없을듯..

이런 팁은 건수가 많은 게시판에서 효과를 볼 수 있죠..
그 전에는 오히려 느린 느낌도 받을 수도..

서버가 널럴하다면 상관없겠졍..
천잰데

게시글 목록

번호 제목
1795
1789
1785
1784
1783
1774
1758
1743
1730
1727
1718
1709
1691
1690
1679
1673
1660
1645
1636
1633