У меня небольшая проблема. Я делаю bb коды и у меня не очень получается... Мой код: PHP: <?php function bb($a){ global $MY, $ip; $a = str_replace("\\","\\\\",$a); $a = str_replace("\"","\\\"",$a); $a = preg_replace("#<\?if\(\\\$(.*?)\\\$\)\?>#i","\"; if(\"\$\\1\$\"){ echo \"",$a); $a = preg_replace("#<\?if\(\\\$(.*?)\\\$=(.*?)\)\?>#i","\"; if(\"\$\\1\$\"==\"\\2\"){ echo \"",$a); $a = str_replace("<?else?>","\"; }else{ echo \"",$a); $a = str_replace("<?endif?>","\"; } echo \"",$a); $a = str_replace( array('$USER_GROUP$', '$USER_GROUP_ID$', '$USER_EMAIL$', '$USER_NICK$', '$USER_PASSWORD$', '$IP_ADDRESS$'), array($MY[group_text], $MY[group], $MY[email], $MY[nick], $MY[pass], $ip), $a); $a = str_replace("\$","\\\$",$a); $a = "echo \"$a\";"; if(!@eval($a)){ echo "Не закрыто одно или более условий"; } } bb('<?if($USER_GROUP_ID$)?>Условие 1<?endif?><?if($USER_GROUP_ID$="4")?>Вы админ<?endif?>'); ?> global $MY, $ip - это глобальные переменные которые работают. Моя основная проблема в том что я хочу сделать что если не закрыто условие то чтобы это выводилось, но у меня почему то выводится всегда, даже если код выполнился нормально.
Вобщем что бы не грузить вас говорю короче: как проверить успешно ли выполнилась функция eval или она не выполнилась из за ошибки, if(!@eval("Код")){ echo "Ошибка"; } - не работает
Функция eval() возвращает NULL пока не вызывается return, в случае чего возвращается значение, переданное return. Если в исполняемом коде присутствует ошибка, то eval() возвращает FALSE и продолжается нормальное выполнение последующего кода. Ошибку обработки кода парсером невозможно использовать в set_error_handler(). http://ru.php.net/manual/ru/function.eval.php Можешь в конец кода, который выполняется в eval() дописывать " return(true);" и тогда сможешь проверять его выполнение простым if(eval($code))
У меня ещё такой вопрос: я не очень хорошо понимаю принцип preg_replace и поэтому прошу помощи. Как найти в тексте <? тут цифры, +, -, *, / или = ?> preg_replace("#<\?(.*?)\?>#i","'.\\1.'",$text); ищет любой текст в <? ?> , а как только цифры - = + / и *