система — Как исправить ошибку 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() не выполняет?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector