Pers.narod.ru. PHP. Система управления сайтом MiniCMS |
То, что здесь выложено - бесплатный побочный продукт другой работы. В этом виде система написана за пару дней и не претендует на многое. Тем не менее, она несложна в установке, удобна в эксплуатации, компактна по размеру и не так уж слаба по возможностям. Распространяется свободно, при этом я не требую обязательных ссылок на себя, хотя мне будет приятно, если Вы, используя что-то отсюда, сошлетесь на сайт pers.narod.ru.
P.S. Этот скрипт не получил развития, хотя идея "многопользовательского блога" была неплохая. Отчасти на базе этого скрипта делался Blognot.
Назначение MiniCMS и системные требования |
Система управления сайтом на PHP+MySQL. Позволяет создать и поддерживать одноуровневую иерерхию разделов и статей, относящихся к разделам. Поддерживает одного администратора и нескольких авторов, которые могут готовить статьи для опубликования администратором. К каждой статье могут добавляться картинка в формате gif или jpeg, а также произвольный файл-архив.
Требует:
Задумана как мультиплатформенная, проверена на IIS и Apache.
В файле php.ini должна быть установлена директива
register_globals = On
Это нужно для работы редиректов header() и хранения глобальной переменной сессии.
Начиная с версии 4.2 значение по умолчанию может быть = Off
Необходима также включенная директива
file_uploads = On
По умолчанию директива обычно так и установлена.
Возможности |
Установка MiniCMS |
Развернув архив, скопируйте его содержимое в нужную папку сервера.
Папки pictures и archives предназначены для закачки файлов авторами, на них должны быть установлены достаточные для этого права (в идеале 0777). Для всех остальных папок и файлов достаточно прав по умолчанию (0644).
Перед созданием базы настройте систему, отредактировав "под себя" файл config.php. Имя администратора Admin пока не меняйте.
Внимательно прочитайте, что сказано внизу config.php о необходимости указания настроек MySQL в include_db.php. Как правило, эти настройки даются хостером.
Некоторые злые хостеры отключают функцию mysql_pconnect, тогда ее единственный вызов в include_db.php надо заменить на mysql_connect.
Если Вы хотите более "навороченный" дизайн, можете изменить также header.php и footer.php.
Все содержимое страниц размещается в единственную ячейку таблицы после включения header.php и до включения footer.php. Это нормально для небольших по объему статей.
В папке sql находится единственный файл minicms.sql, его нужно выполнить в своей среде MySQL.
Если Вы еще не пользуетесь замечательной средой PHPMyAdmin для управления своими базами - самое время ее скачать, она бесплатна и широко распространена.
Не забудьте, что на сервере НЕ ДОЛЖНО быть папки sql с файлом minicms.sql :-)
Выполните первый вход как Admin с паролем 123.
Дальше можно поступить одним из двух способов:
1) Зайти в админку и просто сменить пароль;
2) Создать нового пользователя-админа с другим паролем, удалить запись Admin, поменять настройку $admin в config.php и заново запустить систему.
Ограничения и направления развития |
Защита системы в целом несовершенна.
I. Пароли хранятся прямо в базе, в реале есть способы лучше:
1) применяем crypt ("пароль_юзера") - и затем пишем полученную строку в базу. После ввода юзером пароля смотрим
if (crypt("ввод_юзера") == "значение_из_базы") { //пароль подтвержден }
2) в запросе MySQL на сохранение пароля пишем что-то вроде
insert into таблица (поле_имени,поле_пароля) values (имя_юзера,password('пароль_юзера'))т.е. используем функцию MySQL password()
После ввода юзером имени и пароля делаем запрос типа
select count(*) from таблица where поле_имени='имя_юзера' and поле_пароля=password('пароль_юзера')
Если имена юзеров уникальны и пароль введен верно, запрос вернет 1, иначе 0.
Оба способа имеют тот недостаток, что восстановить забытый пароль уже нельзя... нельзя и поменять его юзеру, поэтому я для простоты не стал заморачиваться.
II. Не предусмотрена защита от злонамеренных или неаккуратных действий авторов контента, которые могут добавлять в базу все, что угодно.
III. Не предусмотрена "многоступенчатая" защита публикуемых статей (например, если вы открыли форму добавления статьи и сразу нажали "Отправить", Вы предлагаете к публикации пустую статью :-) Но Вы же админ? Вот юзер, пишущий в гостевой, так сделать не сможет. :-)
IV. Не предусмотрено иной защиты от злоумышленников, кроме механизма сессий. В настоящее время он считается не совсем надежным, однако, чтобы "сломать", надо подделывать данные HTTP и тому подобное. Вряд ли Ваш сайт кому-то настолько нужен :-)
V. "Внутренняя" видимая только авторам и админу часть сделана предельно лаконичной по интерфейсу и возможностям, хотя минимум необходимых функций в ней есть.
VI. Вывод уменьшенной копии картинки (если она есть) несовершенен - картинку просто масштабирует браузер. На самом деле, лучше не возлагать на него эту работу, а написать сценарий вроде
$image=$HTTP_GET_VARS['image']; ... $size = GetImageSize($image); $width = $size[0]; $height = $size[1]; ... $src = @ImageCreateFromJpeg ($image); $dst = @ImageCreate($new_width,$new_height); ImageCopyResized($dst, $src, 0, 0, 0, 0, $new_width,$new_height,$width,$height); header("Content-type: image/jpeg"); ImageJpeg($dst); ImageDestroy($src); ImageDestroy($dst);
Только лень.
VII. Поиска по основным текстам статей, то есть, по таблице stories, в этой версии нет. Но его легко сделать по образцу поиска ключей (search.php). В любом случае, скорость такого поиска будет сильно уменьшаться с увеличением размеров базы статей.
Система может пригодиться Вам для изучения PHP и написания собственных "движков".
Права, демо, ссылка для скачивания |
Все авторские права принадлежат мне. Условия использования системы соответствуют общим условиям использования бесплатного контента с сайта pers.narod.ru
Демо-сайт на движке системы работает по адресу www.minicms.tu1.ru (возможно, ссылка временная).
Возможные "вылетания" на страницу 403 не являются глюками системы, они связаны с тем, что бесплатный хостинг плохо относится к относительным путям во внутренних ссылках.
Скачать: minicms.zip, 39 Кб
Версия и дата изменения: v.1.0beta, 03.11.2007
гостевая; E-mail |