filter — Как безопасно и эффективно ссылаться на $ _SERVER [‘DOCUMENT_ROOT’] в переполнении стека

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

$doc_root = filter_input(INPUT_SERVER, 'DOCUMENT_ROOT');

Чтобы получить документ корень. Но без указанного фильтра это просто FILTER_UNSAFE_RAW … какой фильтр использовать, есть ли предопределенный фильтр для путей или мне нужно создать свой собственный с помощью регулярных выражений.

Теперь, когда я отфильтровал $doc_root мне отфильтровать от $_SERVER суперглобальный массив каждый раз, когда я хочу его использовать? Или я должен объявить global $doc_root внутри функции, а затем использовать это (или это действительно лучше ссылаться на $GLOBALS массив?)?

0

Решение

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

Поэтому, если вас беспокоит эта скрытая зависимость, вы должны взять значение в вашем фронт-контроллере и ввести его в класс, используя его. Или, если вы используете DI-контейнер, вы можете определить сервис, который возвращает это значение.

С помощью filter_input функция здесь совсем не помогает — она ​​просто скрывает суперглобальный доступ.

Возможно, более безопасный вариант действительно использует __DIR__ постоянная.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]