Как создать инсталлятор для собственной cms ?
Итак, Вы написали свою cms. Если нет - можете взять мою бесплатную -
megainformatic cms free
Правда для
megainformatic cms free инсталлятор не требуется вообще !!! Сайт созданный на базе неё работает без my sql только
на файлах. Поэтому вся установка сводится к копированию файлов системы на ваш хостинг.
Для более продвинутых вариантов cms, использующих базы данных my sql - а такие более распространены (
megainformatic cms,
megainformatic cms express и производные), в задачу инсталлятора будет
входить создание первоначальной структуры базы данных будущего сайта без участия пользователя.
Пользователь должен будет лишь создать новую пустую базу данных и передать данные доступа к ней в инсталлятор.
Ну и конечно же инсталлятор должен решить другие дополнительные задачи - автонастройка файла settings, создание прочих настроек
состояния сайта по-умолчанию.
В данном уроке мы создадим такой простейший инсталлятор, который будет:
1.) запрашивать пользователя данные доступа к новой базе данных для сайта
2.) создавать первоначальную структуру базы данных нового сайта
3.) обновлять содержимое файла настроек settings.php
Рассмотрим теперь более подробно как организуется процесс установки сайта с помощью инсталлятора.
Во-первых в дистрибутив вашей cms добавляется папка install, которая будет содержать как минимум файл install.php выполняющий
все необходимые шаги процесса установки.
В нашем примере таких шагов будет даже 4:
1) Краткая инструкция для пользователя о том, как создать новую базу данных для сайта (поскольку инсталлятор этот шаг выполнить сам
не сможет, тут требуется участие пользователя);
2) Поля для ввода данных доступа к созданной базе данных и адрес сайта (тут думаю всё тоже понятно - пользователь должен ввести некоторую информацию о имени базы данных, имени пользователя, пароле, сервере и адресе сайта) - эту информацию инсталлятор будет использовать для автоматического создания структуры базы данных и заполнения её необходимыми данными
3) Непосредственная работа инсталлятора по созданию структуры базы данных и заполнению её необходимыми данными (это собственно скрипт в файле install.php, который будет делать всю необходимую работу уже без прямого участия пользователя);
4) Завершающий шаг установки - инсталлятор создаст файл settings.php, содержащий все необходимые настройки для правильной работы сайта, а также
создаст необходимые данные, которые будут свидетельствовать об успешном выполнении установки. (суть работы скрипта install.php тут сводится к созданию файла settings.php с необходимым содержимым, а также созданию специального файла-флага успешного окончания установки, пользователю также выдается сообщение об успешном окончании установки и необходимости удаления папки install с сайта, т. к. её присутствие после успешного выполнения установки сайта становится крайне нежелательным, а сам инсталлятор естественно эту операцию сделать не может).
Мы рассмотрели то, что нужно сделать в теории, а теперь перейдём к практике.
В папке дистрибутива вашей cms создаем подпапку install и помещаем в неё файл install.php.
В файл install.php заносим следующий код -
<?php
$install_system_name = 'megainformatic cms express';
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Установка <?php echo $install_system_name; ?></title>
<style>
#main {
width: 100%;
margin: 0;
padding: 0;
font-size: 12px;
color: #000000;
background: #ffffff;
font-family: Verdana, Arial, sans-serif;
font-weight: normal;
text-align: center;
}
#container {
width: 800px;
background: #fae3a6;
margin: 0 auto;
}
#desc {
width: 600px;
text-align: left;
margin: 0 auto;
}
#db_connect_form {
width: 480px;
text-align: left;
margin: 0 auto;
background: #cecece;
}
.blue_text {
color: #1c71ad;
}
.orange_bold_text {
color: #ff8e15;
font-weight: bold;
}
.start_install_btn {
color: #ffffff;
border: 2px #ffffff solid;
background: #12be16;
}
</style>
</head>
<body>
<div id="main">
<div id="container">
<?php
/////////////////////////////////// функции
//разворачиваем данные в базе данных сайта
function deploy_database_data()
{
$result = 0;
global $dbhost;
global $dbuser;
global $dbpassw;
global $dbsite;
$papers = array();
if ($rc = mysql_connect($dbhost, $dbuser, $dbpassw))
{
mysql_select_db($dbsite);
//$table = PAPERS_TABLE;
/*$sql = 'SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";';
$s = mysql_query($sql);
if ( !$s )
{
die('Invalid query: ' . mysql_error());
return $result;
}*/
$sql = 'CREATE TABLE IF NOT EXISTS papers (
pageid int(11) NOT NULL AUTO_INCREMENT,
pagetitle varchar(255) NOT NULL,
pagefile varchar(255) NOT NULL,
UNIQUE KEY pageid (pageid)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;';
$s = mysql_query($sql);
if ( !$s )
{
die('Invalid query: ' . mysql_error());
return $result;
}
mysql_close($rc);
}
if ($rc = mysql_connect($dbhost, $dbuser, $dbpassw))
{
mysql_select_db($dbsite);
$sql = "INSERT INTO papers (pageid, pagetitle, pagefile) VALUES
(1, 'CMS Мега Информатик', 'papers/home.txt'),
(2, 'Подготовка макета сайта', 'papers/maket/maket.txt'),
(3, 'Верстка созданного макета', 'papers/verstka/verstka.txt'),
(4, 'Добавление модулей обеспечивающих функционал', 'papers/modules/modules.txt'),
(5, 'Основы добавления контента на сайт, управления и поддержки сайта', 'papers/content/content.txt'),
(6, 'Проверка работы сайта, установка на хостинг', 'papers/hosting/hosting.txt'),
(7, 'Основы продвижения созданного сайт', 'papers/promo/promo.txt'),
(8, 'Мега Информатик - Создание шаблонов', 'papers/templates/templates.txt'),
(9, 'Создание интернет-магазина', 'papers/shop/shop.txt');";
$s = mysql_query($sql);
if ( !$s )
{
die('Invalid query: ' . mysql_error());
return $result;
}
mysql_close($rc);
$result = 1;
}
return $result;
}
//создаем файл settings.php с конфигурацией сайта
function create_config()
{
$result = 0;
global $dbhost;
global $dbuser;
global $dbpassw;
global $dbsite;
global $site_url;
$data = '<?php'.PHP_EOL;
$data .= '/* ====================================================='.PHP_EOL;
$data .= 'megainformatic cms express 14.04.2012'.PHP_EOL;
$data .= 'http://www.megainformatic.ru'.PHP_EOL;
$data .= 'Автор: Синицин Андрей Сергеевич (megainformatic)'.PHP_EOL;
$data .= '***************************'.PHP_EOL;
$data .= 'файл настроек'.PHP_EOL;
$data .= '====================================================
*/'.PHP_EOL;
$data .= '//настройки доступа к бд'.PHP_EOL;
$data .= '$site_url = \''.$site_url.'\'; //пропишите адрес к вашему сайту'.PHP_EOL;
$data .= '$dbhost = "'.$dbhost.'"; //сервер базы данных обычно 127.0.0.1 либо localhost'.PHP_EOL;
$data .= '$dbsite = "'.$dbsite.'"; //сюда нужно вписать имя созданной вами для сайта базы данных'.PHP_EOL;
$data .= '$dbuser = "'.$dbuser.'"; //это имя пользователя базы данных - для локального сайта можно вписать root'.PHP_EOL;
$data .= '$dbpassw = "'.$dbpassw.'"; //пароль доступа к базе данных, для локального сайта можно не использовать'.PHP_EOL;
$data .= '//набор доступных шаблонов'.PHP_EOL;
$data .= '$templates = array(\'magic\', \'orange\', \'green\', \'blue\');'.PHP_EOL;
$data .= '//имя шаблона по-умолчанию'.PHP_EOL;
$data .= '$template_name = "magic";'.PHP_EOL;
$data .= 'if ( isset($_POST[\'template\']) && $_POST[\'template\'] != "" )'.PHP_EOL;
$data .= '{'.PHP_EOL;
$data .= ' if ( in_array($_POST[\'template\'], $templates) )'.PHP_EOL;
$data .= ' $template_name = $_POST[\'template\'];'.PHP_EOL;
$data .= '}'.PHP_EOL;
$data .= '$template_path = "design/".$template_name;'.PHP_EOL;
$data .= '?>'.PHP_EOL;
$config_filename = 'settings.php';
//выводим данные в файл
$cfg_handler = fopen($config_filename, "w");
$result = fwrite($cfg_handler, $data);
fclose($cfg_handler);
return $result;
}
//создаем файл-флаг успешного завершения установки
function create_install_end_flag_file()
{
$result = 0;
global $istall_ended_filename;
$data = 'installation ended ok'.PHP_EOL;
//выводим данные в файл
$flg_handler = fopen($istall_ended_filename, "w");
$result = fwrite($flg_handler, $data);
fclose($flg_handler);
return $result;
}
/////////////////////////////////// исполнение
//логика работы установщика сайта
/*
0) НАЧАЛО УСТАНОВКИ
1) проверяем была ли нажата кнопка start_install
2) если да, то пробуем получить доступ к базе данных с указанными параметрами
3) если доступа нет - выводим предупреждение
4) если доступ есть - в базе данных сайта создаем все необходимые таблицы и заносим в них информацию
5) создаем в корне сайта файл settings.php и заносим в него всю необходимую информацию
6) после успешного выполнения шагов 4 и 5 выдаем сообщение об окончании установки и предупреждение о необходимости полностью удалить
с сайта папку install, в папке install создаем файл install_ended.txt - если при запуске index.php в корне сайта он проверит и
обнаружит в папке install данный файл - то нужно выдать в браузер предупреждение о необходимости полного удаления папки install
с сайта. Пока папка не будет удалена - не давать доступ к сайту не продолжая выполнение кода в index.php а выводить
только сообщение с предупреждением !!!
*/
error_reporting(E_ERROR);
//1) проверяем была ли нажата кнопка start_install
$start_install_action = isset($_POST['start_install']);
//запоминаем введенные данные доступа к базе данных и сайту (если они были введены)
$dbhost = $_POST['database_server'];
if ( !isset($dbhost) || $dbhost == "" )
$dbhost = '127.0.0.1';
$dbuser = $_POST['database_user'];
if ( !isset($dbuser) || $dbuser == "" )
$dbuser = 'root';
$dbpassw = $_POST['database_pass'];
if ( !isset($dbpassw) /*|| $dbpassw == ""*/ )
$dbpassw = '';
$dbsite = $_POST['database_name'];
if ( !isset($dbsite) || $dbsite == "" )
$dbsite = 'my_database';
$site_url = $_POST['site_url'];
if ( !isset($site_url) || $site_url == "" )
$site_url = 'http://localhost/megainformatic_cms_express';
if ( $start_install_action )
{
//2) да! , пробуем получить доступ к базе данных с указанными параметрами
$result = TRUE;
$rc = mysql_connect($dbhost, $dbuser, $dbpassw);
if ( !$rc )
{
$result = FALSE;
}
$s = mysql_select_db($dbsite);
if ( !$s )
{
$result = FALSE;
}
if ( !$result )
{
//3) если доступа нет - выводим предупреждение
echo '<br><span style="color: #ff0000;">Ошибка !!! Невозможно получить доступ к базе данных !!! Пожалуйста еще раз проверьте
правильность введенных данных и нажмите кнопку НАЧАТЬ УСТАНОВКУ еще раз</span><br><br><br>';
}
else {
mysql_close($rc);
//include_once "includes/constants.php";
//4) если доступ есть - в базе данных сайта создаем все необходимые таблицы и заносим в них информацию
$result = deploy_database_data();
//5) создаем в корне сайта файл settings.php и заносим в него всю необходимую информацию
$result = $result && create_config();
//6) в папке install создаем файл install_ended.txt - он служит флагом успешного окончания установки
//!!! предупреждает ситуацию повторной установки уже установленного сайта !!!
$result = $result && create_install_end_flag_file();
echo 'установка успешно завершена !!! <br><br>Теперь сайт будет работать в штатном режиме и Вы можете обратиться к нему по адресу - '.'<a href="'.$site_url.'">'.$site_url.'</a><br><br>
<br><span style="color: #ff0000;">ВНИМАНИЕ !!! УСТАНОВКА САЙТА ПОЛНОСТЬЮ ЗАВЕРШЕНА И ВАМ НЕОБХОДИМО УДАЛИТЬ ПАПКУ install с вашего сайта. Пока Вы это не сделаете дальнейшая работа невозможна. После удаления папки install просто обратитесь по адресу сайта и сайт заработает.</span>';
}
}
//else
//0) НАЧАЛО УСТАНОВКИ
//выводим начальную страницу установщика
if ( !$result )
{
echo '<img src="install/images/installer.png" border="0" alt="установка '.$install_system_name.'" title="установка '.$install_system_name.'"
width="320" height="240">
<br><br>
Добро пожаловать в установщик системы <strong>'.$install_system_name.'</strong><br><br>
<div id="desc">
1) Создайте <span class="blue_text">новую базу данных</span><br><br>
Если Вы выполняете установку на DENVER то,<br><br> в отдельном окне (вкладке) браузера обратитесь по адресу <span class="blue_text">http://localhost/Tools/phpmyadmin/index.php</span><br><br>
или кликните
эту ссылку - <a href="http://localhost/Tools/phpmyadmin/index.php" target="_blank">http://localhost/Tools/phpmyadmin/index.php</a><br><br><br>
<span class="orange_bold_text">!!! ОБРАТИТЕ ВНИМАНИЕ DENVER ДОЛЖЕН БЫТЬ ЗАПУЩЕН !!!<br><br></span>
Если Вы выполняете установку сайта на хостинг, то используйте панель управления Вашим хостингом, для создания новой базы данных сайта. При этом выполнение шага 1.1 будет отличаться, т. к. это действие Вы будете выполнять через панель управления Вашим хостингом. За более подробной информацией обращайтесь к вашему хостинг-провайдеру.<br><br>
1.1) В открывшейся странице phpMyAdmin введите имя для новой базы данных, например, <span class="blue_text">my_database</span> и укажите кодировку для новой базы данных <span class="blue_text">cp1251_general_ci</span> как показано на рисунке<br><br>
<img src="install/images/create_new_database.jpg" border="0" alt="создание новой базы данных" title="создание новой базы данных"
width="512" height="353"><br><br>
после этого нажмите кнопку <span class="blue_text">Create</span><br><br>
2) в поля указанные ниже, введите необходимую для доступа к созданной базе данных информацию, а затем нажмите кнопку НАЧАТЬ УСТАНОВКУ<br><br>
<div id="db_connect_form"><br><br><strong>Доступ к новой базе данных сайта</strong><br><br>
<form name="site_installer" id="site_installer" action="index.php" method="post">
<strong>Адрес сервера:</strong><br> <input type="text" name="database_server" value="'.$dbhost.'" >(обычно <span class="blue_text">localhost</span> или <span class="blue_text">127.0.0.1</span>)<br><br>
<strong>Имя базы данных:</strong><br> <input type="text" name="database_name" value="'.$dbsite.'" >(введите обязательно такое же имя, которое использовали при создании новой базы данных)<br><br>
<strong>Имя пользователя:</strong><br><input type="text" name="database_user" value="'.$dbuser.'" > (для локальной базы данных на DENVER можно использовать <span class="blue_text">root</span>)<br><br>
<strong>Пароль:</strong><br><input type="text" name="database_pass" value="'.$dbpassw.'" > (для локальной базы данных на DENVER можно не вводить)<br><br>
<strong>Доступ к сайту</strong><br><br>
<strong>Адрес сайта:</strong><br><input type="text" name="site_url" size="60" value="'.$site_url.'" > (укажите адес сайта - для локального сайта на DENVER установленного в папку <strong>megainformatic_cms_express</strong> можно использовать адрес <span class="blue_text">http://localhost/megainformatic_cms_express</span>)<br><br>
<input class="start_install_btn" type="submit" name="start_install" value="Начать установку"><br><br>
</form>
</div><!-- end of #db_connect_form -->
В процессе установки созданная база данных будет заполнена необходимыми данными, а также в файл <strong>settings.php</strong> будут занесены
правильные настройки для работы вашего сайта.<br><br>
</div><!-- end of #desc -->';
}
?>
</div><?php /* end of #container */ ?>
</div><?php /* end of #main */ ?>
</body>
</html>
Приведенный код описывает выполнение всех указанных 4 шагов.
В коде страницы инсталлятора используются 2 изображения - 1 в качестве логотипа инсталлятора, а второе - поясняющее шаг создания новой базы данных для пользователя.
Оба эти изображения можно разместить в папке install/images/
Приведенный код, чтобы лучше его понять Вы можете вставить в собственный файл install.php и протестировать как он работает.
Второй важный момент, который надо учитывать - это код, который нужно вставить в файл index.php вашей cms.
Поскольку любой сайт начинает свою работу именно с файла index.php размещенного в корне сайта, то активировать процесс установки
сайта достаточно просто.
В самом начале файла index.php мы разместим такой код -
//выполняем установку сайта
//была ли успешно завершена установка ?
$istall_ended_filename = 'install/install_ended.txt';
if ( file_exists($istall_ended_filename ) )
{
//ДА! Поэтому нужно полностью удалить папку install
echo '
<span style="color: #ff0000;">ВНИМАНИЕ !!! УСТАНОВКА САЙТА ПОЛНОСТЬЮ ЗАВЕРШЕНА И ВАМ НЕОБХОДИМО УДАЛИТЬ ПАПКУ install с вашего сайта. Пока<br><br> Вы это не сделаете дальнейшая работа невозможна. После удаления папки install просто обратитесь по адресу сайта и сайт заработает.</span>';
exit();
}
else {
//НЕТ! Тогда выполняем процедуру установки сайта
$installer = 'install/install.php';
if ( file_exists($installer ) )
{
require_once $installer;
}
}
//конец установки
По сути это всё.
Работать это будет следующим образом - Вы (или пользователь, который хочет установить сайт) после копирования всех файлов и папок сайта на хостинг обращается к сайту по его адресу.
При этом код, который мы внедрили в index.php будет проверять наличие файла-флага успешной установки.
Если такого файла в папке install еще нет - будет проверяться наличие папки install и файла install.php в ней.
Если такая папка и файл есть - управление будет передаваться ему и будет открыта страница ИНСТАЛЛЯТОРА в браузере.
Соответственно пользователь выполнит все необходимые действия следуя инстукциям, после чего install.php успешно выполнит свою задачу.
По окончании этого процесса пользователь будет уведомлен о необходимости удаления с сайта папки install. Пока пользователь не сделает этого - он будет получать предупреждение, а сайт работать не будет.
Как только пользователь удалит или хотя бы просто переименует папку install, то никаких помех к дальнейшей работе установленного сайта уже не будет и сайт при обращении к нему будет уже работать в обычном режиме.
Таким образом достаточно гибко и просто будет реализован процесс развертывания нового сайта, требующий от пользователя значительно меньше усилий по его установке и настройке.
Спасибо за внимание !
Тема данной статьи не претендует на простоту и исключительную ясность изложения, но вам был показан пример реального работающего кода, который Вы можете успешно применять в качестве основы для инсталляторов в своих cms.
Вы также можете заказать систему
megainformatic cms express или её производные и увидеть воочию каким образом развертывается сайт при помощи инсталлятора, ну и разумеется получить работающий сайт под ключ.