글쓴사람 붕어알
글쓴시간2007년 11월 15일 오후 9시 16분 58초
    제목이런 식으로 중복을 제거해도 될까요? 되긴 되는데....
질문해놓고 기다리는 중에 하나 만들어 봤습니다.
얼렁뚱땅 만들어서 좀 그런데....
일단은 template_의 경우엔 좀더 연구가 필요하겠네요.
왜냐면 template_는 분할된 파일은 각각 컴파일하니까요.
한꺼번에 평가할 기회가 없어 보입니다.

분할된 템플릿을 최종형태로 include된 상태에서 평가를 하든가,
include가 아니라도 나눠진 상태로 전체적인 평가를 할 수 있으면 좋을텐데요.

그냥 모든 문서를 ob_start()해서 버퍼에 담은 다음에
출력 직전에 처리해버릴까요?
그러면 번거롭기도 하고 뭔가 자원을 낭비하는 것 같네요.

한편으로는 이런 외부링크가 중복되어 나타나더라도
재호출(http request) 등으로 인한 지연이나 트라픽 같은 문제가 없다면
그냥 냅두는 게 정답인 것 같기도 합니다.

<?
$test_str= " <script language='javascript' src='/test.js'></script> \n";
$test_str.=" <link rel=StyleSheet HREF='./temp.css' type=text/css title=MORNING> \n";
$test_str.=" <script language='javascript' src='/test2.js'></script> \n";
$test_str.=" <script language='javascript' src='/test.js'></script> \n";
$test_str.=" <link rel=StyleSheet HREF=\"./temp.css\" type=text/css title=MORNING> \n";
$test_str.=" <link rel=StyleSheet HREF='./temp3.css' type=text/css title=MORNING> \n";
$test_str.=" <link rel=StyleSheet HREF='./temp.css' type=text/css title=MORNING> \n";
$test_str.=" <script language='javascript' src='/test2.js'></script> \n";
$test_str.=" <script language='javascript' src='/test.js'></script> \n";
$test_str.=" <link rel=StyleSheet HREF=\"./temp.css\" type=text/css title=MORNING> \n";
$test_str.=" <link rel=StyleSheet HREF='./temp3.css' type=text/css title=MORNING> \n";

echo"원본 소스코드<br>\n<pre>";
echo(htmlspecialchars($test_str));
echo"</pre>";

$new_str= adjust_outlink($test_str);
echo"<hr>변환된 소스코드<br>\n<pre>";
echo(htmlspecialchars($new_str));
echo"</pre>";

function adjust_outlink($str)
{
 $patt_js= '/\s*<script [^>]+src=[\'\"]*([^\'\"]+)[^>]*><\/script>\s*/i';
 $patt_css= '/\s*<link .+stylesheet.+href=[\'\"]*([^\'\"]+)[^>]*>\s*/i';
 $buf=array();

 $line= explode("\n", $str);
 foreach($line as $k=>$v){
   if (preg_match($patt_js, $v,$arr) || preg_match($patt_css, $v,$arr)){
     if (false===array_search($arr[1],$buf)){
       $buf[]=$arr[1];
     }else{
       unset($line[$k]);
     }
   }
 }
 return implode("\n",$line);
}
?>

관리자 붕어알님 안녕하세요. 답변이 늦었네요.

작성하신 것을 사용하셔도 되겠구요..

말씀하신 문제를 처리하는 예제 필터가 있습니다.

http://www.xtac.net/reference/?item=removetmpcode

사용방법은 템플릿 속성 중

var $postfilter="removeTmpCode";

이렇게 지정하시면 됩니다.

제거를 해주는 편이 좋겠지만 그냥 두더라도 서버쪽에 js 나 css 파일에 nocache 설정을 특별히 하지 않았다면 브라우저가 캐쉬를 하니까 그다지 문제는 없을 것 같습니다.
07-11-15 22:06
관리자 js 는 캐쉬 문제만 있는 것이 아니고, css 는 여러 번 렌더링할지도 모르니 제거해주는 게 좋겠네요. 정정합니다.
07-11-16 00:28
    이름
비밀번호
  외부 참조 파일들이 중복되는 경우의 중복제거는 어떻게? 07-11-15 2785 붕어알
>> 이런 식으로 중복을 제거해도 될까요? 되긴 되는데.. [2] 07-11-15 2161 붕어알
  [응답]이런 식으로 중복을 제거해도 될까요? 되긴 .. 07-11-16 1566 관리자
 
Since 2003-03-03 hosted on vultr.com