За последние 24 часа нас посетили 17426 программистов и 1222 робота. Сейчас ищут 1427 программистов ...

Проблемы с .htaccess

Тема в разделе "PHP для новичков", создана пользователем MaxioN, 10 июн 2016.

  1. MaxioN

    MaxioN Новичок

    С нами с:
    5 май 2016
    Сообщения:
    7
    Симпатии:
    1
    Здравствуйте! Возникла проблема с обработкой ошибок с помощью файла .htaccess.

    Код файла .htaccess:

    Код (Text):
    1. ErrorDocument 401 /errors/error.php?id=401
    2. ErrorDocument 403 /errors/error.php?id=403
    3. ErrorDocument 404 /errors/error.php?id=404
    4. ErrorDocument 500 /errors/error.php?id=500
    Код файла error.php:
    PHP:
    1. <?php
    2.  
    3. if (!$id) $id = 404;
    4.  
    5. // ассоциативный массив кодов и описаний
    6. $a[401] = "Требуется авторизация";
    7. $a[403] = "Пользователь не прошел аутентификацию, доступ запрещен";
    8. $a[404] = "Документ не найден";
    9. $a[500] = "Внутренняя ошибка сервера";
    10. $a[400] = "Неправильный запрос";
    11. ?>
    12.  
    13. <h1><i><?=$id?></i> <?=$a[$id]?></h1>
    Не знаю, почему, но код никак не реагирует на окончания типа "?id=404" и не видит переменную $id.

    Ошибка:
    Notice: Undefined variable: id in C:\xampp\htdocs\errors\error.php on line 3
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Вы изучаете пхп по очень древнему манускрипту. Ранее существовала практика автоматического объявления переменных для всех ключей суперглобальных массивов. То есть $_GET['id'] можно было найти в $id. Потом эту практику признали небезопасной и начали рекомендовать её не использовать. Потом отключили по умолчанию.

    Что делать? Объявить переменную $id. Можно сразу ей присвоить значение $_GET['id'], а можно и скастовать тип переменной - (int). Или даже заюзать filter_input() с соответствующими опциями тонкой настройки.
     
    denis01 нравится это.
  3. MaxioN

    MaxioN Новичок

    С нами с:
    5 май 2016
    Сообщения:
    7
    Симпатии:
    1
    Спасибо, проблема решена. :)