如何修复eval()错误PHP

时间:2015-05-06 07:37:25

标签: php system eval

我有一个像这样的数组。

ARRAY[0][DATAROOTNEW.PROPIEDADES.OPERACION][0]
ARRAY[0][DATAROOTNEW.PROPIEDADES.HABITACIONES][0]
ARRAY[0][DATAROOT.PROPIEDADES.BANO][0]
ARRAY[0][DATAROOT.PROPIEDADES.TITULO][0]

我有一个PHP代码,用于检查提供的字符串是否为PHP脚本并使用eval()执行。代码如下

$result='';
    $is_php=false;
    $pos=strpos($item,'PHP:');
    if($pos===0){
        $is_php=true;
        $code=str_replace('PHP:','',$item);
        $pos=strpos($code,$base_name_feed);
        if($pos>=0){
            foreach($keys as $k){
             $code=str_replace('['.$k.']','$this->ARRAY['.$current_item.']["'.$k.'"][0]',$code);
            }
        }
    }
    if($is_php){
                echo '<p>'.$code.'</p>';
                eval($code);
    }

我提供给代码的字符串是这样的

if([DATAROOTNEW.PROPIEDADES.HABITACIONES] >=1 or [DATAROOTNEW.PROPIEDADES.BANOS]>=1) { if($this->IdCategoria=='') $this->setIdCategoria(); $result="cat".$this->IdCategoria."_1[;;]Detail_Rooms[;;]DOUBLE[;;]".[DATAROOTNEW.PROPIEDADES.HABITACIONES]."[;;]0[;;;]cat".$this->IdCategoria."_2[;;]Detail_Bathrooms[;;]DOUBLE[;;]".[DATAROOTNEW.PROPIEDADES.BANOS]."[;;]0"; } else $result='';

所以我的代码替换了与数组匹配的所有字符串。并将其作为有效代码。

$code=str_replace('['.$k.']','$this->ARRAY['.$current_item.']["'.$k.'"][0]',$code);

问题是如果数组中不存在密钥,代码将变为无效,因为替换语句将无效。

我的问题是我应该如何验证这一点,以便Eval()不执行?

0 个答案:

没有答案