|
Parse error: syntax error
-------------------------
У меня все на пхп5 - ошибки исправляю так - смотрю не работающую функцию
eval()'d code on line 188
, в данном случае и тут так, и ищу аналогичную в мануале по пхп5. Исправляю и все работает.
добавлено через 4 минуты
Функция eval возвращает значение, являющееся результатом выполнения кода.
execfile(file[, globals[, locals]])
Функция работает идентично функции eval, за тем исключением, что выполняет не строку кода, а целый файл, в остальном см описание функции eval.
--------------------------
Со «слабостью» PHP-шной функции eval(), касающейся безусловного завершения скрипта при ошибке E_ERROR, мы никак бороться не можем. Тем не менее, формирование «лицеприятной» ссылки на файл, содержащий ошибку, нам все же по силам!
Мы воспользуемся одним «побочным эффектом», имеющим место во всех версиях PHP 4 и 5. Речь идет о «срабатывании» обработчика выходного потока, установленного по ob_start(), при любом завершении скрипта — не важно, ошибочном или легальном.
Проще всего продемонстрировать этот эффект может следующий код:
Листинг 5 скопировать код в буфер обмена
<?php
# Устанавливаем обработчик выходного потока скрипта.
ob_start('ob_handler');
# Печатаем что-нибудь.
echo "Something";
# Вызываем неопределенную функцию внутри eval!
eval('undefinedFunc();');
# Печатаем еще что-то (к этому моменту скрипт уже мертв!).
echo "Other";
# Функция-обработчик просто добавляет некоторый "хвост"
# к тексту, выведенному скриптом ранее.
function ob_handler($text)
{
return "$text<hr>Hello from handler!";
}
?>
Вы увидите, что, несмотря на неперехватываемую ошибку класса E_ERROR, обработчик ob_handler() успешно запустился:
Листинг 6 скопировать код в буфер обмена
Something
Fatal error: Call to undefined function: undefinedfunc() in e.php(7) :
eval()'d code on line 1
--------------------------------------------------------
Hello from handler!
Как же в обработчике определить, завершился скрипт аварийно или же корректно? Существует всего лишь один способ сделать это, но он довольно «грязен». Необходимо разобрать регулярным выражением «хвост» текста, переданного в функцию, и грубо проверить, содержится ли в нем сообщение об ошибке «в eval()'d code». В случае необходимости именно это сообщение и нужно заменить на текст, содержащий «фальшивое» имя файла.
Последний раз редактировалось Igord; 20.03.2006 в 16:19..
Причина: Добавлено сообщение
|