Run-Time Проверка Синтаксиса PHP с помощью eval
9 декабря 2009
Проверяем на E_PARSE ошибки строку кода или файл
Функция языковая конструкция eval предназначена для выполнения произвольного PHP-кода из текстовой строки. В случае ошибки при парсинге строки кода она возвращает false. Иначе значение при return (null если его нет). Если мы поместим "return true;" перед остальным кодом - произойдёт только проверка синтаксиса без выполнения остального кода:
function check_syntax($code) {
return @eval('return true;' . $code);
}
var_dump( check_syntax("echo 123") ); // выведет false, т.к. пропущена точка с запятой
Для проверки синтаксиса php-файла только добавим закрывающий php-тэг после return true; (т.к. eval начинает обработку в режиме php-script, мы переходим в html-mode):
function check_syntax_file($filename) {
return @eval('return true; ?>' . file_get_contents($filename));
}
var_dump( check_syntax_file("php_syntax_t.php") );
Зачем?
Например, чтобы избежать падения скрипта при include-инге неизвестного (пользовательского, создаваемго автоматически) файла, или кода из БД.
Ловим E_PARSE-ошибки в любом коде
E_PARSE-ошибки внутри eval-кода нельзя поймать с помощью обычного set_error_handler(), и уж тем более использовать это, не исполняя eval-код. Поэтому мы будем ловить их, используя расширение Parsekit PECL. Примерно так:
Далее »
