Собственные страницы ошибок (400, 403, 404, 500)

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Собственные страницы ошибок (400, 403, 404, 500)

Сообщение Slash » Пт ноя 20, 2015 11:37 am

Здравствуйте.
В теме: .htaccess я уже рассказывал, как сделать собственные страницы ошибок, такие ошибки, как 400, 401, 403, 404, 500... В этой теме хочу рассказать подробнее, как я сделал себе страницы ошибок.
У меня языковые переменные ошибок находятся в отдельном файле:

Код: Выделить всё

<?php 
/*
    RU - Русский язык
    Файл error.php
*/

if (empty($lang) or !is_array($lang)) # Проверка на существование переменной $lang и является ли она массивом
{
    $lang = array(); # Если переменная не существует или это не массив, то создается массив
}

$lang = array_merge($lang, array( # Соединяет массив с уже созданным массивом
    'error_400' => 'Ошибка 400 (Bad Request)',
    'error_403' => 'Ошибка 403',
    'error_404' => 'Ошибка 404 (Page Not Found)',
    'error_500' => 'Ошибка 500 (Internal Server Error)',
    
    
'error_400_info' => '<div class="error">Ошибка 400. Неверный запрос (Bad Request).</div>',
    'error_403_info' => '<div class="error">Ошибка 403. Нет прав на просмотр контента или на просмотр страницы.</div>',
    'error_404_info' => '<div class="error">Ошибка 404. Страница не найдена (Page Not Found).</div>',
    'error_500_info' => '<div class="error">Ошибка 500. Внутренняя ошибка сервера (Internal Server Error).</div>'
)); 

Файл, который отвечает за вывод страниц ошибок:

Код: Выделить всё

<?php
/*
    Страницы ошибок
    Файл error.php
*/

include('lang/ru/error.php'); # Подключение языкового файла

if (isset($_GET['mode']))
{
    # Ошибка 400
    if ($_GET['mode'] == '400')
    {
        $title = $lang['error_400'] . ' &bull; ' . $lang['site_name'];
        $info  = $lang['error_400_info'];
    }
    # Ошибка 403
    if ($_GET['mode'] == '403')
    {
        $title = $lang['error_403'] . ' &bull; ' . $lang['site_name'];
        $info  = $lang['error_403_info'];
    }
    # Ошибка 404
    if ($_GET['mode'] == '404')
    {
        $title = $lang['error_404'] . ' &bull; ' . $lang['site_name'];
        $info  = $lang['error_404_info'];
    }
    # Ошибка 500
    if ($_GET['mode'] == '500')
    {
        $title = $lang['error_500'] . ' &bull; ' . $lang['site_name'];
        $info  = $lang['error_500_info'];
    }
    
    template
('info');     # Подключение шаблона
}
else 
{
    $location = (isset($_SERVER['HTTP_REFERER'])) ? (basename($_SERVER['HTTP_REFERER'])) : 'index' . PHP;
    header('Location: ' . $location, true, 301);
    exit;

Переменная $lang['site_name'] находится у меня в другом языковом файле (тоже массив $lang), содержит она в себе название сайта.

Ну конечно вставил в .htaccess следующие строки:

Код: Выделить всё

<IfModule mod_rewrite.c>
    RewriteEngine On

    
# Error Page
    ErrorDocument 400 http://site/error.php?mode=400
    ErrorDocument 403 http://site/error.php?mode=403
    ErrorDocument 404 http://site/error.php?mode=404
    ErrorDocument 500 http://site/error.php?mode=500    
</IfModule>

Я прописываю абсолютный адрес страницы ошибок, так как используя не полный адрес страницы:

Код: Выделить всё

    ErrorDocument 404 /error.php?mode=404

перейдя на несуществующею страницу (пример): http://site/dir1/dir2/dir3/file.php, могут не подгрузиться стили сайта, JS и картинки, в итоги страница будет выглядеть криво, а все ссылки на этой страницы будут иметь адрес такого вида (например на главную): http://site/dir1/dir2/dir3/index.php, что совершенно не правильно.

Ну, вот пока все. Надеюсь информация была Вам полезной.
Спасибо за внимание.
Реклама

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость