2016-09-22 3 views
-3

У меня есть два файла: test.txt, которые будут содержать код шаблона. Мне нужно оценить этот шаблон, который будет оцениваться по php. EVAL() Функция давала некоторые ошибки на ifelse и других подобных условиях.Как создать собственную систему php templating?

test.txt

@$firmware_path=true; 
@$DIALPLAN=1312321; 
@$MAX_LINES=3; 
@$data=array(); 
@$OPERATOR_IP=''; 
@$enabled=true; 
@ if ($firmware_path) 
@{ 
    firmware server: http://{$OPERATOR_IP}{$firmware_path} 
@ } 



@ for ($i = 1; $i <= $MAX_LINES; $i++) 
@ { 
    @ $enabled = isset($LINES[$i - 1]); 
    @ if ($enabled) 
    @{ 
     @ $data = $LINES[$i -1]; 

     @ if ($data['USER_FULLNAME']) 
     @{ 
      @ if ($PHONE_LABEL) 
      @{ 
       @ $screenName = $data['USER_FULLNAME'] . ' ' . $data['TELNUM']; 
       @ $screenName2 = $PHONE_LABEL; 
      @ } 
      @else 
      @{ 
       @ $screenName = $data['USER_FULLNAME']; 
       @ $screenName2 = $data['TELNUM']; 
      @ } 
     @ } 
     @else 
     @{ 
      @ $screenName = $data['TELNUM']; 
      @ $screenName2 = $PHONE_LABEL; 
     @ } 

    @ } 
@ } 

index.php

<?php 

$file = fopen("test.txt","r"); 
$arr=array(); 
while(! feof($file)) 
{ 
    $arr[]=fgets($file); 
} 


$format=''; 
foreach($arr as $key=>$value) 
{ 
    if(substr(ltrim($value), 0, 1) === '@') 
    { 
    $result=str_replace('@','',$value); 

    $format.=$result.PHP_EOL; 

    } 
    else 
    { 

    $format.='$final="'.$value.'";'; 
    } 

} 


$format.=' return $final;'; 
echo eval($format); 


?> 

результат должен быть сформирован в соответствии с PHP

+0

в моем файле index.php первый я удалить знак @ –

+1

Ваш PHP-код в тексте не кажется правильным. Вы запустили его через переводчика? – apokryfos

+0

Итак, как выглядит '$ format', прежде чем пытаться его оценить? – jeroen

ответ

0

Я решил проблему, как это. Это похоже на php templating, в котором мы пытаемся использовать настраиваемый сменный код для выполнения в некоторых сценариях.

Вот алгоритм я использовал для этого:

ПРИМЕЧАНИЕ поместить код шаблона в $arr

$arr=str_replace('transliterate','urldecode',$arr); 

$format='$final="";'; 
foreach($arr as $key=>$value) 
{ 
if(substr(ltrim($value), 0, 1) === '@') 
{ 
//run it as php line through eval 
$result=str_replace('@','',$value); 

$format.=$result.PHP_EOL; 

} 
else 
{ 
// just echo as normal php echo line 
$value=str_replace('"','\"',$value); 

$value=str_replace('{','".(',$value); 
$value=str_replace('}',')."',$value); 

$format.='$final.="'.$value.'";'.PHP_EOL; 
} 

} 

$format.=' return $final;'; 

$evaled_result= eval($format); 
Смежные вопросы