Вопрос в следующем. Как построить Exeption на Parse Error?
if(!function_exists('exceptions_error_handler')){
function exceptions_error_handler($severity,$message,$filename,$line) {
throw new ErrorException($message,0,$severity,$filename,$line);}
}
set_error_handler('exceptions_error_handler',E_ALL & ~E_NOTICE &~ E_USER_NOTICE | E_STRICT);
error_reporting(E_ALL | E_STRICT);
........
........
........
if(is_readable($__require_file))
try{require_once $__require_file;}
catch(Exception $__error){var_dump($__error->getTrace());}
else echo 'no readable file'; // Логирование
Т.е. что я делаю. Присоединяю файл php, но заведомо незнаю насколько он синтаксически валиден, поэтому необходима проверка файла на валидность или необходимо построить исключение.
Представленный код выше не работает. Функция http://ru.php.net/manual/en/function.php-check-syntax.php жёстко ограничена по версии php.
Как быть?
Спустя 38 минут, 10 секунд (29.04.2010 - 19:06) glock18 написал(а):
Цитата |
The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called. |
было бы хорошо, если бы ошибки E_ERROR можно было там обрабатывать, но даже они не обрабатываются так, что обидно. parse обычно не так критично важен все таки
Спустя 26 минут, 55 секунд (29.04.2010 - 19:33) rodzewich написал(а):
Ну хорошо, а тогда если не исключение, то хотя бы проверка на валидность ...
Как это можно сделать?
Как закрыть (хоть как) дырку?
Как это можно сделать?
Как закрыть (хоть как) дырку?
Спустя 2 часа, 30 минут, 25 секунд (29.04.2010 - 22:03) glock18 написал(а):
как дырку... если скрипт будет отрабатывать не при каждом запросе, то можно сотворить "истинную заплатку" - запускать проверяемый файл через exec/и иже с ними. получаем все что отдал скрипт и смотрим на наличие parse error. пойдет для автоматических тестов, но не для проверки на лету, что очевидно, конечно.
_____________