Включение в каталоги документов веб-сервера активного содержимого наподобие скриптов и исполняемых файлов ослабляет безопасность. Из-за ошибок в конфигурации сервера, когда скрипты не выполняются, а отображаются в браузере как HTML-документы, утекает интеллектуальная собственность или конфиденциальная информация наподобие паролей. Поэтому системные администраторы отдают преимущество настройке другой структуры каталогов хранения скриптов, к которым открывают доступ только через CGI-интерфейс PHP, который гарантирует интерпретацию, а не вывод кода скриптов.
Потребуется установить через директиву doc_root корневой каталог, который отличается от корневого каталога веб-документов, если метод, который проверяет запросы на перенаправление, как описывает предыдущая глава, недоступен.
     Корневой каталог для PHP-скриптов устанавливают
     в файле конфигурации PHP
     через директиву doc_root
     или через переменную окружения PHP_DOCUMENT_ROOT.
     При установке корневого каталога для PHP-скриптов CGI-версия
     двоичного файла PHP сформирует путь к файлу, который требуется открыть,
     на основе значения директивы doc_root и пути,
     который указали в запросе. Это гарантирует, что скрипты за пределами
     этого каталога, за исключением каталога user_dir,
     не выполнятся.
    
     Другая директива, которая помогает создавать безопасные пути к файлам, —
     user_dir. Путём к файлу, который требуется открыть,
     управляет только директива doc_root, если директиву
     user_dir не установили. При запросе URL-адреса наподобие
     http://my.host/~user/doc.php обработчик откроет файл
     с названием ~user/doc.php (да, название каталога
     начинается с символа ~) в каталоге, который установили в директиве
     doc_root, а не файл в домашнем каталоге пользователей.
    
     Но если для директивы user_dir установили значение наподобие
     public_php, то запрос URL-адреса
     http://my.host/~user/doc.php
     откроет файл doc.php, который лежит
     в домашнем каталоге пользователя в директории public_php.
     Приведём пример. Обработчик выполнит файл /home/user/public_php/doc.php,
     если домашний каталог пользователя /home/user.
    
     PHP разворачивает значение директивы user_dir
     независимо от настройки директивы doc_root,
     поэтому управлять корневым каталогом документов веб-сервера
     и каталогом пользователя разрешается по отдельности.
    
