Обработка ошибок в PHP и перенаправление на страницу ошибок - PullRequest
1 голос
/ 21 сентября 2011

Я хотел бы зарегистрировать ошибку, если она произошла, на веб-странице php и перенаправить пользователя на пользовательскую страницу ошибки. Как это может быть достигнуто. Я сейчас использую

set_error_handler('my_error_handler');

для регистрации всех ошибок.

Как лучше всего показывать страницу с ошибкой после обработки ошибки в php.

Ответы [ 3 ]

0 голосов
/ 21 сентября 2011

Перенаправление никогда не должно использоваться.
Просто покажите страницу ошибки на месте. Просто добавьте эти строки прямо в ваш обработчик ошибок

header("HTTP/1.1 503 Service Unavailable");
readfile($_SERVER['DOCUMENT_ROOT']."/503.html");
exit;

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

0 голосов
/ 21 сентября 2011

Я написал специальный класс для этого:

/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

class CommonException extends Exception {
    private $logFile = "../log/commonEx.log";
    private $log = Array();
    public $code = "";

    public function __construct($message = null, $code = 0) {                             
        $exLog['msg'] = $message;
        $exLog['code'] = $code;
        $this->code = $code;

        $exLog['file'] = $this->getFile();
        $exLog['line'] = $this->getLine();

        $this->log = $exLog;
        $this->_writeToLog($exLog);
        sfLoader::loadHelpers('I18N');
    }

    public function display() {
        return $this->log;
    }

    private function _writeToLog($exLog) {
        error_log(implode("|", $exLog) . "\r\n", 3, $this->logFile);
    }
}

В вашем try .. catch блоке:

try {
    // ...
} catch (Exception $e) {
    $errMsg = new CommonException($e->getMessage(), $e->getCode());
    // redirect to anywhere you want
}
0 голосов
/ 21 сентября 2011

Если хотите, вы можете использовать PHP Исключения .Они не слишком популярны (в настоящее время, во всяком случае), но они работают просто отлично.

Просто throw new MyException("Error text") и ловите его во время исполнения главной страницы, где вы можете распечатать свою симпатичную страницу с ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...