2015-09-25 3 views
1

Как можно организовать выполнение этого сценария после уведомления/предупреждения без изменения другого поведения, вкл., Уведомлений/предупреждающих сообщений, т.е. не бросая исключение.Просто прекратите выполнение скрипта по уведомлению/предупреждению

Stop script execution upon notice/warning - другой вопрос.

+1

Вы должны остановить его самостоятельно ... Создайте обработчик ошибок или создайте функцию ... –

+0

Возможно, вы можете управлять ею с помощью исключений (@see http://www.w3schools.com/php/php_exception.asp) – dam660

+0

Спасибо, но обратите внимание: «не исключение». – ChrisJJ

ответ

0

Вы можете создать функцию обработки пользовательских ошибок, например, так:

<?php 
// error handler function 
function myErrorHandler($errno, $errstr, $errfile, $errline) 
{ 
    if (!(error_reporting() & $errno)) { 
     // This error code is not included in error_reporting 
     return; 
    } 

    switch ($errno) { 
     case E_USER_ERROR: exit('Im a user error.'); 
     case E_USER_WARNING: exit('Im a user warning'); 
     case E_USER_NOTICE: 
       printNotice($errno, $errstr, $errfile, $errline); 
       break; 
     default:    exit('Unknown Error'); 
    } 

    // don't execute PHP internal error handler 
    return true; 
} 

function printNotice($errno, $errstr, $errfile, $errline) 
{ 
    // use the following vars to output the original error 
    var_dump($errno, $errstr, $errfile, $errline); 

    exit; 
} 

Важно константы: E_USER_NOTICE и E_USER_WARNING.

function printNotice() показывает, как вы можете напечатать исходную ошибку, , чтобы она не была изменена, а затем прекратила выполнение сценария с выходом. Все исходные данные об ошибках (сообщение, номер строки и т. Д.) Находятся в переменных $ errno, $ errstr, $ errfile, $ errline. PHP делает данные об ошибках автоматически доступными на зарегистрированном обработчике ошибок (здесь myErrorHandler). В этом примере я переадресую все параметры во второй раз, чтобы напечатать функциюNotice(), которая могла бы форматировать ошибку по-другому или делать то, что вам нравится.

А затем зарегистрировать его set_error_handler(), например, так:

<?php 
// register your error handler 
set_error_handler('myErrorHandler'); 

Для того, чтобы проверить обработку ошибок вы можете использовать функцию trigger_error():

trigger_error("This is a User Error", E_USER_ERROR); 
trigger_error("This is a User Warning", E_USER_WARNING); 
trigger_error("This is a User Warning", E_USER_NOTICE); 
+0

Спасибо, но это меняет другое поведение. Например. изменяет вывод «Notice: Неопределенный индекс ...» на «Неизвестная ошибка». – ChrisJJ

+0

Это всего лишь пример кода. Вы можете разместить все, что угодно, в инструкции switch. Я изменил код, чтобы показать, что коммутатор является лишь условным, чтобы поймать ошибку. Что вы делаете с этим - это ваша вещь. Данные ошибки находятся в переменных, переданных обработчику ошибок. Вы можете просто отследить их или отформатировать или вообще не использовать. –

+1

ОК, поэтому предложение состоит в том, чтобы воспроизвести встроенный формат сообщения с кодом пользователя. Благодарю. – ChrisJJ

1

прямой ответ на ваш вопрос есть NO вы не можете.
Вам необходимо создать собственный обработчик ошибок, который прекратит выполнение.
Как нет способа сделать это снаружи.

Смежные вопросы