Автор: Пользователь скрыл имя, 13 Марта 2012 в 21:41, дипломная работа
Процесс создания сайта требует от разработчика определённого набора знаний в области программирования, проектирования дизайна, если цель – создание оригинального продукта со спектром оригинальных функций.
PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста») — скриптовый язык программирования, созданный для генерации HTML-страниц на веб-сервере и работы с базами данных. В настоящее время поддерживается подавляющим большинством хостеров. Входит в LAMP — «стандартный» набор для создания веб-сайтов (Linux, Apache, MySQL, PHP (Python или Perl)).
В области программирования для Сети PHP — один из популярнейших скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности и распространению исходных кодов на основе лицензии PHP. PHP отличается наличием ядра и подключаемых модулей, «расширений»: для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и т. п. Любой желающий может разработать своё собственное расширение и подключить его. Существуют сотни расширений, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Интерпретатор PHP подключается к веб-серверу либо через модуль, созданный специально для этого сервера (например, для Apache или IIS), либо в качестве CGI-приложения.
Кроме этого, он может использоваться для решения административных задач в операционных системах UNIX, GNU/Linux, Microsoft Windows, Mac OS X и AmigaOS. Однако в таком качестве он не получил распространение, отдавая пальму первенства Perl, Python и VBScript.
Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из Perl.
Ныне PHP используется сотнями тысяч разработчиков. Несколько миллионов сайтов сообщают о работе с PHP, что составляет более пятой доли доменов Интернета.
MySQL — это система управления реляционными базами данных. Работа с данными в базах осуществляется при помощи запросов, написанных на языке SQL (Structured Query Language) — структурированном языке запросов. MySQL обеспечивает удобный интерфейс к связанным данным и позволяет проводить с информацией операции, недоступные с обычными файлами, например поиск, сортировка, агрегирование. MySQL получил распространение в основном как быстрая, надежная база данных для web-ресурсов. Гостевые книги, форумы, интернет-магазины и многие другие задачи решаются с помощью MySQL. Распространяется под GNU General Public License или под собственной коммерческой лицензией. Помимо этого разработчики создают функциональность по заказу лицензионных пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.
Перечислю основные приятные стороны пакета MySQL.
Многопоточность. Поддержка нескольких одновременных запросов.
Оптимизация связей с присоединением многих данных за один проход.
Записи фиксированной и переменной длины.
ODBC драйвер в комплекте с исходником
Гибкая система привилегий и паролей.
До 16 ключей в таблице. Каждый ключ может иметь до 15 полей.
Поддержка ключевых полей и специальных полей в операторе CREATE.
Поддержка чисел длинной от 1 до 4 байт (ints, float, double, fixed), строк переменной длины и меток времени.
Интерфейс с языками C и perl.
Основанная на потоках, быстрая система памяти.
Утилита проверки и ремонта таблицы ( isamchk).
Все данные хранятся в формате ISO8859_1.
Все операции работы со строками не обращают внимания на регистр символов в обрабатываемых строках.
Псевдонимы применимы как к таблицам, так и к отдельным колонкам в таблице.
Все поля имеют значение по умолчанию. INSERT можно использовать на любом подмножестве полей.
Легкость управления таблицей, включая добавление и удаление ключей и полей.
Apache HTTP-сервер — свободный веб-сервер.
Apache является кроссплатформенным ПО, поддерживает операционные системы Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.
Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентиф
Система конфигурации Apache основана на текстовых конфигурационных файлах. Имеет три условных уровня конфигурации:
Конфигурация сервера (httpd.conf).
Конфигурация виртуального хоста (httpd.conf c версии 2.2 extra/httpd-vhosts.conf).
Конфигурация уровня директории (.htaccess).
Apache HTTP Server поддерживает модульность. Существует более 500 модулей, выполняющих различные функции. Модули могут быть, как включены в состав сервера в момент компиляции, так и загружены динамически, через директивы конфигурационного файла. В модулях реализуются такие вещи, как:
Поддержка языков программирования.
Добавление функционала.
Исправление ошибок или модификация основных функций.
Усиление безопасности.
Существует множество модулей, добавляющих к Apache поддержку различных языков программирования и систем разработки.
Основная задача дипломного проекта создание системы, которая упростит создание сайта в целом, БД для него, его редактирование, а так же внешнее оформление.
Задачи, решенные при создании системы:
– инсталлятор системы, с формированием БД;
– шаблон вывода контента из базы данных на страницу;
– панель для добавления этого самого контента;
– панель редактирования контента;
– поддержка рассылки новостей(RSS-канал);
– поддержка комментариев;
– шаблонизатор;
– сепаратор рубрик;
– присутствие капчи для неавторизованных пользователей;
– загрузка файлов на сервер;
– редактор пользователей;
– чпу для страниц, статей и компонентов;
– многоязычность;
Схема работы CMS изображена на рис.4.1. Шаблон первичен, он является активной структурой, подключает необходимые программные компоненты по мере надобности, а те в свою очередь, извлекают нужную информацию из базы данных.
Рис.4.1 Схема работы CMS
Талицы БД в системе формируются в скрипте install.php, их структура представлена на рис.4.2
Рис.4.2 Таблица categories
Поле Category_id в в таблице категорий имеет флаги AUTO_INCREMENT и PRIMARY, уникальные идентификаторы используются для сортировки.
Описание основных элементов системы:
1. Модули
Для расширения базового функционала я добавил систему модулей, они являются мини-компонентами и используются основным шаблоном по его усмотрению.
Рис.4.3 Таблица Modules
Модули хранятся в базе данных в таблице modules (рис.4.3), подключаются они по средствам функции get_module_list:
function get_module_list() {
// Открываем каталог и выходим в случае ошибки.
chdir("mod");
$d = @opendir(".");
if (!$d) return;
while (($e=readdir($d)) !== false) {
// Игнорируем элементы .. и .
if ($e=='.' || $e=='..') continue;
// Нам нужны только подкаталоги.
if (!@is_dir($e)) continue;
$mod[] = $e;
flush();
}
closedir($d);
chdir("..");
return $mod;
}
И в index.php это выглядит так:
$mod = get_module_list();
foreach ($mod as $module) {
$path = 'mod/'.$module.'/view.php';
if (file_exists($path)) require_once ($path);
}
Таким образом мы подключили программную основу, функции и обработчики.
2. Сепаратор рубрик
Для создания системы новостей на сайте требуются отдельная таблица в БД, отдельный редактор и отдельные функции. В моем случае уже все есть в системе статей. Осталось создать отдельную рубрику для новостей и выводить ее где надо и когда надо. Сначало добавляем в таблицу рубрик (categories) новое поле type. По умолчанию все категории имеют тип <> - пустая строка. Далее пишем модуль separator, который будем обрабатывать типизированные категории и затем их сепарировать по признаку type:
<?php
* $cat_id - идентификатор категории;
* $start - столько статей пропустить;
* $stop - столько взять.
* * * * * */
$mod_separator = true; //модуль подключен
### Функция возвращает список записей
### определенной категории.
function separator_list ($cat_id, $start, $stop){
$result = mysql_query('
SELECT *, UNIX_TIMESTAMP(stamp) AS stamp
FROM '.PREFIX.'article
WHERE category_id = "'.intval($cat_id).'" AND approve=1
ORDER BY stamp DESC LIMIT '.$start.', '.$stop.'
') or die(mysql_error());
for ($db=array(); $row2=mysql_fetch_assoc($
return $db;
}
### Функцмя возвращает список
### уникальных идентификаторов (category_id)
### категорий определенного типа.
function separator_type ($type){
$result = mysql_query('
SELECT category_id FROM '.PREFIX.'categories
WHERE type = "'.$type.'"
ORDER BY category_id
') or die(mysql_error());
for ($db=array(); $row2=mysql_fetch_assoc($
return $db;
}
?>
3. Система комментариев
Структура таблицы comment выглядит следующим образом (рис.4.4):
Рис.4.4 Таблица comment
К определенной статье мы привязываемся по средствам ее идентификатора (поле article_id). Сам модуль:
<?php
if (
(isset($_REQUEST['new_comment'
(isset($_SESSION['login'])) &&
($_REQUEST['my_comment'] !== '') &&
($_REQUEST['sid'] == $_SESSION['sid'])
)
{
$_REQUEST['my_comment'] = mysql_escape_string(
$sql = mysql_query('INSERT into te_comment (article_id, author_id, author, content, date)
values (
"'.$_REQUEST['id'].'",
"'.$_SESSION['author_id'].'",
"'.$_SESSION['name'].'",
"'.$_REQUEST['my_comment'].'",
"'.date("d.m.Y H:i").'"
);
')or die(mysql_error());
$_REQUEST['my_comment'] = '';
}
//функция формирует список комментариев для данной статьи
function get_comments (){
$result = mysql_query('
SELECT * FROM te_comment WHERE article_id = "'.intval($_REQUEST['id']).'"
ORDER BY id
') or die(mysql_error());
for ($db=array(); $row2=mysql_fetch_assoc($
return $db;
}
?>
Функция get_comments() использ
4. Загрузка файлов на сервер
Для решения этого вопроса требуется multipart-форма в Шаблоне и функция-обработчика этой формы:
<?php
function upload_file($max_size=3145728) {
if ($_FILES)
{
switch ($_FILES['filename']['type'])
{
case 'image/jpeg': $ext='jpg'; break;
case 'image/pjpeg': $ext='jpg'; break;
case 'image/png': $ext='png'; break;
default: $ext='';
}
if ($ext == true && $_FILES['filename']['size'] < $max_size)
{
$file=time().'.'.$ext;
$m=move_uploaded_file ($_FILES['filename']['tmp_
if ($m) $mes='Файл загружен.';
else $mes='Ошибка. Возможно не хватает прав доступа.';
}
else $mes='Ошибка. Тип файла не поддерживается или его размер больше допустимого.';
}
return $mes;
}
?>
У функции upload_file() всего один необязательный параметр – максимальный размер загружаемого файла в байтах. Функция возвращает сообщение об успешности выполнения загрузки. Глобальный массив $_FILES содержит информацию о загружаемых файлах, далее проверяем тип файла.