2016-09-22 77 views
-3

我有两个文件名称test.txt,将包含模板code.I需要评估这个模板来评估由PHP。 EVAL()函数在ifelse和其他类似条件中给出了一些错误。如何创建自己的PHP模板系统?

的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模板,我们尝试使用自定义可更改代码在某些场景中执行。

下面是我用这个算法:

注意把模板代码$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);