Я в настоящее время пытаюсь создать CMS с помощью PHP, просто в интересах образования. Я хочу, чтобы администраторы смогли создать содержание, которое будет анализироваться и экономиться серверное хранилище в чистой HTML-форме для предотвращения издержек, которым выполняющий Сценарий PHP подвергся бы. К сожалению, я мог только думать о нескольких способах сделать так:
cached
каталог. Сценарий PHP мог затем include
или fopen/fread/echo
содержание из файла в cached
каталог в разовом запросом. Это могло, возможно, быть выполнено способом Mediawiki-esque: что-то как index.php?page=xyz
мог считать и повторить содержание от cached/xyz.html
во времени выполнения. Однако я должен буду гарантировать исправность $_GET['page']
предотвратить противные изменения как index.php?page=http://www.bad-site.org/malicious-script.js
.Я лично не слишком взволнован второй идеей, но первый звучит очень небезопасным. Кто-то мог предложить хороший способ получить сделанный?
Править: Я не в пользу выбирающих данных из базы данных. Единственное время я хотел бы выбрать данные из базы данных, будет, когда содержание будет кэшироваться. Во-вторых, у меня нет доступа к memcached или любому акселератору PHP.
Поскольку вы создаете CMS, вам придется согласиться с тем, что, если пользователь хочет причинить посетителям зло, они, скорее всего, так и сделают. Это верно независимо от того, где вы храните свой контент.
Если весь общедоступный сайт представляет собой статический контент, нет ничего плохого в том, чтобы позволить CMS напрямую записывать файлы. Однако вы захотите настроить веб-сервер так, чтобы он ничего не выполнял в любом каталоге, доступном для записи CMS.
Даже если вы не хотите каждый раз обращаться к базе данных, вы можете настроить кеш, чтобы минимизировать чтение базы данных. Zend_Cache очень хорошо работает для этого и может довольно эффективно использоваться как автономный компонент.
Вы должны поместить свои страницы в базу данных и получать их с помощью параметризованных запросов SQL.
Я бы выбрал второй вариант, но изменил его так, чтобы файлы извлекались с помощью mod_rewrite, а не пользовательской функции php.