2010-09-06 2 views
3

Мы разрабатываем несколько веб-приложений для запуска на нашем собственном сервере, которые будут совместно использовать ряд основных классов в рамках их установки MVC.Помещение основных классов выше веб-корня - хорошая или плохая идея?

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

Специализированные классы будут размещены в соответствующем веб-каталоге, но общие библиотеки будут находиться в/var/www/shared-libraries или что-то подобное.

Помимо потенциального возможного сбоя всех сайтов одновременно с плохой строкой кода, есть ли причина, по которой я не хочу идти по этому пути?

Спасибо.

+0

Symfony делает что-то подобное. Я не думаю, что это плохая идея. –

ответ

2

Zend Framework использует этот метод, который делает все приложение безопасным для вывода чувствительного PHP-кода в виде обычного текста, поскольку все находится вне корня документа и с помощью mod_redirect, чтобы узнать, какой модуль/контроллер/действие нужно отправить.

Основной макет проекта выглядит как

application 
- controllers 
- views 
- - scripts 
public 
- .htaccess 
- index.php 
library 
- Zend 

и имеющий ../library в вашем включают путь давайте вы автозагрузку все классы Zend (i.g. Zend_View) легко из любого места в приложении. Естественно, Zend также поставляется с автозагрузчиками классов для помощников вида и других префиксов пользовательских классов, но это не касается области вопросов.

Поскольку все находится за пределами корня документа (/ public), единственный скрипт, который пользователь мог видеть (в случае, если что-то пошло не так, и пользователи начинают видеть открытый PHP-код) - это вызов бутстрапа приложения и других строк инициализации (ig включают в себя пути и некоторые константы, но вы также можете инициализировать все, включив другой внешний файл ...).

Короче говоря, это хорошая идея и хорошая практика, чтобы положить основные классы вне корня документа. Все, что вам нужно, то, чтобы добавить путь к общей библиотеке в списке путей включают что-то вроде:

set_include_path(implode(PATH_SEPARATOR, array(
    LIBRARY_PATH, 
    get_include_path(), 
))); 

где library_path является относительным или абсолютным путем к общей библиотеке.

Следует помнить, что чем больше путей вы добавите, тем медленнее будут классы автозагрузки. Хорошая практика состоит в том, чтобы иметь только около 3 путей или меньше. Взгляните на то, как Zend удалось обойти это с помощью своих autoloaders.

1

Не только хорошая техника, но вы должны делать это каждый раз, когда сможете!

Вы никогда не знаете, когда вы столкнетесь с sys-admin-of-hell, который отключает PHP и позволяет Apache перекачивать файлы в виде полнотекстового текста! ;)

И у меня был этот опыт из первых рук. Все было в безопасности, поскольку никакой код не был закачан пользователям.

+2

хи, хи, я - системный администратор, а также кодер, поэтому, надеюсь, я не выключу PHP :-) Но да, звучит как повод сделать это так или иначе. – niggles

Смежные вопросы