Мы разрабатываем несколько веб-приложений для запуска на нашем собственном сервере, которые будут совместно использовать ряд основных классов в рамках своей установки MVC.
Я думаю о том, чтобы помещать классы выше веб-корня, поэтому все приложения могут автоматически загружать () эти классы, используя только одну копию, и не беспокоиться о проблемах синхронизации.
Специализированные классы будут размещаться в соответствующем веб-каталоге, но общие библиотеки будут находиться в / var / www / shared-libraries или что-то подобное.
Помимо потенциального сбоя всех сайтов одновременно с плохой строкой кода, есть ли причина, по которой я не хотел бы идти по этому пути?
Благодарю.
Zend Framework использует этот метод, который позволяет всему приложению безопасно выводить чувствительный PHP-код в виде обычного текста, поскольку все находится за пределами корня документа и с помощью mod_redirect, чтобы узнать, какой модуль / контроллер / действие нужно отправить.
Основной макет проекта выглядит примерно так:
application - controllers - views - - scripts public - .htaccess - index.php library - Zend
и имея ../library
в вашем пути включения, вы можете легко ../library
все классы Zend (ig Zend_View) из любого места приложения. Естественно, Zend также поставляется с автозагрузчиками классов для помощников вида и других префиксов пользовательских классов, но это не касается области вопросов.
Поскольку все находится за пределами корня документа (/ public), единственный скрипт, который может видеть пользователь (в случае, если что-то пойдет не так, и пользователи начинают видеть открытый PHP-код) – это вызов бутстрапа приложения и других строк инициализации (ig включают пути и и некоторые константы, но вы могли бы также инициализировать все, включая другой внешний файл …).
Короче говоря, да, это хорошая идея и хорошая практика – поставить основные классы вне корня документа. Все, что вам нужно, это добавить путь к вашей общей библиотеке в списке include include с чем-то вроде:
set_include_path(implode(PATH_SEPARATOR, array( LIBRARY_PATH, get_include_path(), )));
где LIBRARY_PATH – относительный или абсолютный путь к вашей общей библиотеке.
Помните, однако, что больше путей, которые вы добавляете, будут более медленными автозагружаемыми классами. Хорошая практика состоит в том, чтобы иметь только около 3 путей или меньше. Посмотрите, как Zend удалось обойти это со своими автозагрузчиками .
Мало того, что это хорошая техника, но вы должны делать это каждый раз, когда сможете!
Вы никогда не знаете, когда вы столкнетесь с sys-admin-of-hell, который отключает PHP и позволяет Apache перекачивать файлы в виде полнотекстового текста! 😉
И у меня был этот опыт из первых рук. Все было в безопасности, поскольку никакой код не был закачан пользователям.