Forum Webscript.Ru
Программирование => PHP => Тема начата: Tronyx от 02 Декабря 2002, 12:58:46
-
Кто нибудь подскажет как лучше организовать проверку логического выражения составленого по правилам PHP??? То что у меня сейчас есть проверкой назвать очень сложно...:(
-
Чего?
И чего у тебя сейчас?
Что значит по правилам РНР?
А это сильно отличается от правил формальной логики?
-
eval ?
-
Прошу прошения! Ужасно сформулировал вопрос.
Есть строка, например: "($var1 < 0 or $var2 > 1000 ) && sizeof($array) != 0"
Надо проверить является ли она синтаксически верной с точки зрения PHP. И если там есть синтаксические ошибки то хотябы примерно указать на них.
Какие будут мнения?
-
RTFM eval :)
[off]
поскольку вопрос ! - то я не вдаюсь в подробности
[/off]
-
Вот есть один вариант:
$str="Логическое выражение";
ob_start();
eval("if(".$str.") echo \'Ok\'; ");
$ob=ob_get_contents();
ob_end_clean();
// Дальше парсим переменную $ob
Спасибо Oak, я думал что warning в коде eval`a остановит выполнение самого скрипта, оказывается что нет.;)
Как вариант можно было парсить логическое выражение самому, по символьно, но это ТАКОЙ ГЕМОРРОЙ...
-
RTFM eval
[OFF]Oak я знаю что это за функция. И изначально даже хотел воспользоваться ей, но меня напугали возможные "не нужные" сообщения об ошибках (например "Undefined varible"), не додумав этот вариант я "отложил его в сторону".[/OFF]
-
Tronyx
А ты перед eval "@" поставь
-
Ага + там можно перенаправить эти сообщения в строковую переменную и выдавать их как тебе хочется.
Т.е то что ты спрашивал
See - Error Handling
:)
-
А ты перед eval "@" поставь
Не подходит под условие задачи:;)
И если там есть синтаксические ошибки то хотябы примерно указать на них.
See - Error Handling
Тоже не подходит... я пишу компилятор шаблонов, он будет распространятся бесплатно, следовательно расчитан на массы, а у многих обработчик ошибок уже определён и переопределять его на свой нельзя. Тем более не чего трудного нет в вырезании текста ошибки из переменной. :)
-
переопределять его на свой нельзя
ээээ.....
(PHP 4 >= 4.0.1)
set_error_handler -- Sets a user-defined error handler function.
-
track_errors boolean
If enabled, the last error message will always be present in the global variable $php_errormsg.
-
track_errors boolean
Спасибо за помощь, но меня вполне устраивает ob_*(); для перехвата ошибок.
-
Tronyx
Как смысл обрабатывать ошибки 2 раза:
1)пихание в буфер
2)обрабатывать этот буфер какой-нить регуляркой
Если set_error_handler делает все одним скопом