2012-06-01 2 views
-2

PHP에서 파일 (index.bel)을 포함하고 파일 내 변수를 렌더링하는 간단한 프레임 워크를 만들려고합니다. 예를 들어, index.bel는 포함 할 수 다음PHP에서 eval을 사용하지 않고 파일의 내용을 렌더링 할 수 있습니까?

<h1>{$variable_name}</h1> 

어떻게 이렇게 index.bel 입력 평가를 사용하거나 프레임 워크의 사용자를 요구하지 않고이를 것 :

$index = "<h1>{$variable_name}</h1>"; 

에서 다른 단어 : eval을 사용하지 않고 파일의 내용을 렌더링 할 수 있습니까? 내 문제에 대한 작업 해결책은 이것이다 :

의 index.php :

<?php 
$variable_name = 'Welcome!'; 
eval ('print "'.file_get_contents ("index.bel").'";'); 

index.bel :

<h1>{$variable_name}</h1> 
+0

'str_replace'를 찾으려면 몇 가지 정규식이 잘못되었습니다 ... –

+0

템플릿 엔진 클래스를 포함하는 것이 좋습니다. SMARTY 예를 들어 (나는 SMARTY가 나오기를 싫어한다.) 적어도 템플릿 엔진은 자신의 프레임 워크를 지원한다. 그것은 그것을 칭찬합니다. – TheBlackBenzKid

+1

템플릿 엔진을 사용하십시오. – Sarfraz

답변

0

예,이 가능하지만, 왜 자신의 프레임 워크를 만들고있다? 제공 한 코드는 Smarty Template처럼 보입니다. 그들이 어떻게했는지 보려고 할 수 있습니다.

이러한 코드를 실행할 수있는 방법은 조각으로 나누는 것입니다. 달러 기호와 밑줄, 문자 또는 숫자가 아닌 다음 기호를 분리했습니다. 일단 그렇게했다. 변수로 파싱 할 수 있습니다.

$ var = 'variable_name'; // 먼저 분할하십시오

echo $$ var; // 주어진 변수를 얻으시오

이런 뜻입니까? 간단한 변수 대체에 대한

$index  = file_get_contents ("index.bel"); 
$replace_from = array ('$variable_a', '$variable_b'); 
$replace_to = array ($var_a_value, $var_b_value); 
$index  = str_replace($replace_from,$replace_to,$index); 

이제이 :

4

나는 많은 알고 당신이 당신의 경우에 자신의, 가장 쉬운 방법을 만들려면 당신이 템플릿 엔진, 하지만를 추가하는 것이 좋습니다 한은 사용 않는 str_replace입니다 하지만 곧 더 많은 태그, 더 많은 기능, 그리고 이런 것들을 할 수있는 한 가지 방법이 preg_replace_callback을 사용하고 있습니다. 결과적으로 변수를 대체하고 다른 파일 인 {include:file.bel}을 포함 할 수 있으므로 {img:foo.png}과 같은 텍스트를 바꿀 수 있으므로이 파일을 살펴볼 수 있습니다.

EDIT : 의견을 더 읽고 나면 독자적인 프레임 워크를 만들 수 있습니다. preg_replace_callback을 살펴보면 여러 가지 방법으로 처리 할 수 ​​있습니다. 여기

아주 간단한 예 : 당신이 원하는 경우

... 
$index = preg_replace_callback ('/{([^}]+)}>/i', 'preg_callback', $index); 
... 

function preg_callback($matches) { 
    var_dump($matches); 

    $s = preg_split("/:/",$matches[1]); // string matched split by : 
    $f = 'func_'.strtolower($s[0]);  // all functions are like func_img,func_include, ... 
    $ret = $f($s);      // call function with all split parameters 

    return $ret; 
} 

function func_img($s) { 
    return '<img src="'.$s[1].'" />'; 
} 

여기에서, 클래스의 모든 기능을 나누어 예를 들어,이 (여러 가지)을 향상시킬 수 있습니다.

관련 문제