Мое личное предпочтение заключается в том, что все, что находится в корне документа, является файлом .php, чтобы указать, что оно непосредственно выполняется веб-сервером, а все, что является библиотекой, является файлом .inc, хранящимся в параллельном каталоге, чтобы указать, что оно НЕ напрямую. исполняемый файл.
Моя стандартная конфигурация
/home/sites/example.com/html/
- все, что здесь можно «безопасно» раскрыть, если PHP не работает и обслуживает необработанный код
/home/sites/example.com/inc/
- библиотеки, файлы конфигурации с паролями (например, класс соединения с базой данных с учетными данными БД) и т. Д. Все, что не должно отображаться, поскольку для этого нет причин.
Хотя вы, безусловно, можете настроить Apache так, чтобы он запрещал доступ к файлам .inc и оставлял их в корне, но вы зависите от Apache для обеспечения вашей безопасности. Если PHP может выйти из строя в Apache и раскрыть ваш код, то блоки .inc ТАКЖЕ также могут выйти из строя и также раскрыть внутреннюю часть вашего кода.
Конечно, если Apache кашляет кровью по всему полу, нет никаких причин, по которым защита от обхода каталога также не может выйти из строя и позволить кому-то сделать http://example.com/../inc/seekritpasswords.txt.
В какой-то момент вы просто должны признать, что если что-то хранится где-либо на веб-сервере, существует вероятность, что сбой может позволить получить доступ к необработанным данным и раскрыть все. Сколько времени и усилий вы хотите потратить на защиту от этого, зависит только от вас.