Доступ к файлам классов PHP за пределами КОРНЕВОГО КАТАЛОГА ДОКУМЕНТА


Я в замешательстве относительно того, что представляет собой " наилучшую практику" для структуры веб-приложения на PHP. Читая этот сайт, есть ряд предложений. Одна из часто упоминаемых структур - "в корневом каталоге документа нет файлов php". Хотя это звучит как хорошая практика, я не вижу, как это работает - веб-сервер не распознает ничего за пределами корневого каталога документа. Я предполагаю, что здесь корневой каталог документа является каталогом общего доступа, примерно так, как показано ниже:

app-
  |
  - htdocs - document root
  | |
  | - index.php
  | - css/
  | - images/
  |
  - PHP classes in here/
  - Other PHP classes in here.../

Или "приложение" в приведенном выше примере является корневым каталогом документа, а каталог htdocs является общедоступной областью структуры сайта?

Исходя из этого, как я могу гарантировать, что общедоступный доступ недоступен для файлов в dir, кроме htdocs пожалуйста?

Author: Steve Cooke, 2012-05-13

2 answers

Концепция проста, особенно если вы используете фреймворк на основе фронт-контроллера, будь то ваш собственный или существующий (например, фреймворк Zend). Когда все запросы поступают через центральный контроллер, файлы, необходимые для обработки запроса, включаются по мере необходимости. Включенные файлы не обязательно должны находиться в корневом каталоге веб-сайта для работы. Они просто должны быть доступны контроллеру для включения и последующего выполнения. Таким образом, только ваш контроллер должен находиться в корневом каталоге веб-сайта. Всё остальное может быть за его пределами.

К вашему сведению, это также работает с приложениями, не связанными с ООП. Вам просто нужно включить нужные файлы на каждую страницу.

В корневом каталоге веб-сайта должны быть любые файлы, такие как изображения, таблицы стилей, файлы javascript и т. Д., Которые запрашиваются браузером.

 7
Author: John Conde, 2012-05-13 03:05:11

Хотя это правда, веб-сервер не распознает ничего "вне" корневого каталога документа, это относится только к файлам, запрошенным ПОЛЬЗОВАТЕЛЕМ через HTTP-запрос.

PHP работает на веб-сервере и не имеет понятия о корнях документов и URL-адресах. он видит только базовую файловую систему операционной системы хоста веб-сервера, а также входящие и исходящие данные, соответствующие определенным стандартам. Единственный раз, когда PHP будет связан каким-либо веб-ограничением, - это если веб-сервер сам работает в тюрьме chroot.

Таким образом, вы можете поместить php-файл в ЛЮБОЕ МЕСТО файловой системы, и, при условии правильности разрешений, PHP сможет добраться до него и запустить его. Не имеет значения, находится ли этот файл в каталоге на глубине 500 уровней где-то полностью за пределами корневого каталога документа - если он доступен, PHP может запустить его.

 5
Author: Marc B, 2012-05-13 04:10:00