Что опять? Я ведь еще не начинал :D
Ага. Навскидку.
Template CMS 2.0.3. Файл Security.php:
function safeName($str, $delimiter = '-') { $str = trim($str); $str = str_replace(array(' ?',' ','--','"','!','@','#','$','%','^','&','*','(',')','+','{','}', '|',':','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','=','laquo', 'raquo',']>','%3c','%253c','%3e','%0e','%28','%29','%2528','%26','%24','%3f','%3b','%3d','<!--','-->'), array('',$delimiter,'-','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',''), $str); $str = str_replace('--','-',$str); $str = rtrim($str, "-"); return translitIt($str); }
Get Simple 3.1.0. Файл basic.php:
function clean_url($text) { $text = strip_tags(lowercase($text)); $code_entities_match = array(' ?',' ','--','"','!','@','#','$','%','^','&','*','(',')','+','{','}','|',':','"','<','>','?','[',']','\\',';',"'",',','/','*','+','~','`','=','.'); $code_entities_replace = array('','-','-','','','','','','','','','','','','','','','','','','','','','','','',''); $text = str_replace($code_entities_match, $code_entities_replace, $text); $text = urlencode($text); $text = str_replace('--','-',$text); $text = rtrim($text, "-"); return $text; }
Такого там много. чувствуется, так сказать, влияние :D Могу еще поискать. Надо?
Не живите иллюзиями и слушайте что вам говорят. Хотя бы иногда.
Легко. Из того небольшого списка, что я посмотрел, мне наибольше Stacey понравилась. Чистый ООП код. Даже обработкой исключений разработчики не побрезговали. Молодцы. Не помешало бы ввести полноценную автозагрузку классов, но с учетом количества классов и так нормально.
Есть, конечно, пару замечаний, но в целом хорошо. Можете в код глянуть, там есть чему поучиться.
Кстати, ваша CMS в некоторых местах с Get Simple поразительно похожа ;)
А и вправду? Зачем?
Хотя если честно, то я не жалею, что потратил два-три часика на копание в вашей, так сказать, CMS. Реализация чего-то издалека похожего на базу данных на XML - это мощно :)
Взгляните на ту же Stacey или Блоголет. Они получше вашей будут в плане архитектуры и чистоты кода.
Что вы так за Кандидат CMS вцепились? Она в разы проще и быстрее вашей. Для сателлитов и простеньких сайтов самое оно.
В Кандидате все предельно просто работает. Пришел запрос, отфильтровались 3 переменные пути, а также массивы $_POST и $_GET. Дальше сразу происходит подгрузка страницы, разбивка на блоки, формирование меню, подгрузка шаблона с PHP вставками и вывод страницы. Это все делается быстро. Очень быстро.
Вы как-то определитесь для чего ваша система. Рассмотрим одно из применений - сателлиты и ваше сравнение в данном контектсте с Кандидатом.
1. Зачем сателлитам так называемое подобие БД? Там нужно чтобы страничка выводилась как можно быстрее и с минимумом потребляемых ресурсов. В идеале: считал файлик со страничкой, считал файлик шаблона, чуть магии - и получайте поисковики страничку. Именно так и работает Кандидат.
2. Установка. В случае с Кандидатом его нужно просто залить на хостинг. "Просто добавь воды", как говориться.
3. Документация. У меня на знакомство с Кандидатом ушло минут 15. Разбираться там особо не в чем. В TemplateCMS нужно еще посидеть, подумать с вашими вызовами функций...
4. Расширяемость. "Powerful Plugin API" - :D Вы API той же Joomla видели в глаза? В Кандидате все просто и понятно: include() в шаблоне. Для установки Сапы полезная штучка.
5. Модульность. См. п. выше. В Кандидате CMS может быть легко переписана под конкретные нужды. Времени это займет раза в два меньше, чем поиск ответа на вопрос "а что же делает функция addHookP()".
6. Управление пользователями. На сателлите :D Зачем?
7. См. выше.
8., 9. и 10. А в Кандидате этого нельзя?
11. KandidatCMS_v.1.4.4_light в распакованном виде около 326 кб. львиную долю занимают темы оформления.
12. :D
13, 14, 15, 16, 17, 18 и 19 - зачем?
Мораль: вы или создавайте систему для сателлитов/простеньких сайтов, или двигайтесь в сторону порталов.
В первом случае придется переделать всю архитектуру CMS в сторону ее упрощения, во втором случае придется переделать всю архитектуру в сторону расширяемости и модульности, добавить наконец-то контроль прав доступа к той или иной странице, модулю, добавить наконец-то поддержку нормальной БД (база данных на XML - это не база данных, это фигня). Можно таке добавить нормальную систему шаблонизации "аля DLE". Также придется поработать над производительностью и организацией функций/классов.
Dewey, а вам что от CMS надо? Всего лишь новости выводить? Такую и самому написать за 1-2 дня можно, насмотревшись видеоуроков всяких. Работать будет, быстро работать.
Так оно примерно и есть.
Поправочка: вам непонятно. 244 kb оперативки - это да, чертовски много :D
Так вот где собака зарыта :D
А теперь о самой CMS. Скачал я это чудо, посмотрел...
Основные моменты:
1) написано все на функциях. Хорошо это или плохо сложно сказать. Но вот зачем в хелперах проверки на function_exists? Если уж создается система, то надо бы как-то решить проблему с именованием функций. Для навигации по коду мне как-то удобней было пользоваться "Поиском по содержимому файлов". Сама CMS организована очень непродуманно и запутанно.
2) глобальные переменные - это зло. В чем сакральный смысл функций:
function getPluginInfo() {
global $plugins_info;
return $plugins_info;
}
?
3) механизм обработки URI и фильтрация входящих данных. Это нужно видеть!
4) и, наверное, самый интересный момент. Так называемый XMLDB, сердце системы. Зачем все хранить в XML? Как показывает тестирование (http://habrahabr.ru/blogs/php/112402/) парсинг XML файлов на порядок медленней того же serialize. "На порядок" - это примерно в 10 раз. Feel the difference, что называется.
Хорошо, когда таких данных немного, но вот когда страничек 100-1000-10000 начинается песец. Сразу пример. В CMS-ке есть метод getAvailablePages(), который загружает и обрабатывает все странички из папки data/pages/. Если таких страниц много, то мало того, что оно будет долго обрабатываться, да еще и памяти будет непомерно жрать. Как минимум - это удвоенный объем папки со страницами.
Ситуация также усугубляется тем, что все настройки хранятся в XML...
Едем дальше. Основной функцией, которая используется для получения данных, является getXML(). При каждом вызове она считывает и декодирует из XML тот или иной файл. Вот вызвали эту функцию десять раз с тем же аргументом в функциях вроде pagesTitle(), pagesDescription(), pagesContent и т.д. - десять раз загрузился и был обработан XML файл со страницей. Нехило так, правда?
Мне страшно подумать, что случится если это все загнать в цикл для всех страниц... Жалких сто страничек - и получаем тысячу считываний и обработок XML. А это все память, это все ресурсы жесткого диска.
Решение тут предельно простое: создать кеш с декодированным содержимым сайта и хранить его в какой-то переменной. При вызове функции getXML() будет производиться проверка на наличие записи в массиве кеша, чтобы лишний раз не лезть на жесткий и не декодировать.
Использование файлов вместо БД тоже накладывает свои ограничения. Что-то сложней сайта-визитки на этой CMS будет проблематично.
Итог: обычная CMS на файлах с кучей недоработок.
skurudo, то есть у вас при обращении http://url-сайта:8080 все хорошо, а при обращении на 80 порт такая фигня?
Попробуйте для проверки такой конфиг:
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://127.0.0.1:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
closeyoureyes, mod_rpaf включен и работает?
Вы бы посмотрели в код как он работает прежде чем писать. Пользователи бывают разные.
Вы, похоже, часто с говносайтами дело имеете. Мы вроде как сам DLE рассматриваем и конкретный случай с MySQL сервером, а не говносайты с парсерами в целом.
Я читать умею. Вы уже говорили, что у вас не падает некий сайт от host-tracker. Мы тут вроде как WP рассматриваем и не "у вас", а у конкретного человека.
О своих познаниях в области администрирования вы тоже сказали более чем достаточно, чтобы сформировалось вполне объективное мнение.
Ключевое слово "у вас" :) Сам факт что у вас VDS пашет на дефолтных настройках много говорит о вас как об администраторе. Вас ждут великие сюрпризы :D HostAce говорите?
Опыт. 10 "метрофф" обычно занимает Apache, который отдает статику. Пора бы это уже знать.