View file install.php

File size: 15.32Kb
<?php
# Morgan

$sqls = array
	(
	'SET NAMES utf8',
	'CREATE TABLE `mf_config` (  `name` varchar(100) NOT NULL,  `value` text NOT NULL,  PRIMARY KEY  (`name`)) ENGINE=MyISAM DEFAULT CHARSET=cp1251',
	'INSERT INTO `mf_config` (`name`, `value`) VALUES(\'path\',	\'{$path}\'),(\'salt\',	\'some salt '.PHP_VERSION.' '.count($_SERVER).' '.rand(1,100).'\'),(\'salt_int\',	\''.rand(1, 20).'\'),(\'onpage_topics\',	\'15\'),(\'onpage_posts\',	\'20\'),(\'time_antispam_topics\',	\'10\'),(\'time_antispam_posts\',	\'3\'),(\'maxlen_post\',	\'50000\'),(\'time_edit_post\',	\'600\'),(\'time_shift\',	\'0\'),(\'index_title\',	\'Трололо\'),(\'users_active\',	\'1\'),(\'mod_reply_to\',	\'1\'),(\'time_antispam_private\',	\'15\'),(\'open_reg\',	\'1\'),(\'maxlen_short_post\',	\'40\'),(\'time_silence\',	\'0\'),(\'domain\',	\'\'),(\'date_start_forum\',	\''.strtotime('Today').'\')',	'CREATE TABLE `mf_forums` (  `id` int(11) NOT NULL auto_increment,  `name` varchar(50) NOT NULL,  `description` varchar(250) NOT NULL,  `position` int(11) NOT NULL,  `level` enum(\'0\',\'1\',\'2\',\'3\') NOT NULL,  `level_topics` enum(\'0\',\'1\',\'2\',\'3\') NOT NULL,  `count_topics` int(11) NOT NULL,  `count_posts` int(11) NOT NULL,  `counter_posts` tinyint(1) NOT NULL,  `counter_topics` tinyint(1) NOT NULL,  PRIMARY KEY  (`id`),  UNIQUE KEY `name` (`name`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_posts` (  `id` int(11) NOT NULL auto_increment,  `tid` int(11) NOT NULL,  `fid` int(11) NOT NULL,  `user_id` int(11) NOT NULL,  `date` int(11) NOT NULL,  `ip` bigint(20) NOT NULL,  `ua` varchar(250) NOT NULL,  `edit_count` tinyint(4) NOT NULL,  `edit_date` int(11) NOT NULL,  `edit_user_id` int(11) NOT NULL,  `answer_to` int(11) NOT NULL,  PRIMARY KEY  (`id`),  KEY `author_id` (`user_id`),  KEY `ip` (`ip`),  KEY `date` (`date`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_posts_answers` (  `pid` int(11) NOT NULL,  `user_id` int(11) NOT NULL,  `answer_pid` int(11) NOT NULL,  `answer_user` int(11) NOT NULL,  `tid` int(11) NOT NULL,  `date` int(11) NOT NULL,  PRIMARY KEY  (`pid`,`answer_pid`),  KEY `pid` (`pid`)) ENGINE=MyISAM DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_posts_text` (  `pid` int(11) NOT NULL,  `text` longtext NOT NULL,  PRIMARY KEY  (`pid`)) ENGINE=MyISAM DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_private_contacts` (  `user_id` int(11) NOT NULL,  `contact_user_id` int(11) NOT NULL,  PRIMARY KEY  (`user_id`,`contact_user_id`)) ENGINE=MyISAM DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_private_messages` (  `id` int(11) NOT NULL auto_increment,  `user_id` int(11) NOT NULL,  `to_user_id` int(11) NOT NULL,  `new` enum(\'0\',\'1\') NOT NULL,  `date` int(11) NOT NULL,  `text` text NOT NULL,  `ip` bigint(20) NOT NULL,  `ua` varchar(250) NOT NULL,  PRIMARY KEY  (`id`), KEY `user_id` (`user_id`), KEY `to_user_id` (`to_user_id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_rules` (  `id` int(11) NOT NULL auto_increment,  `cid` int(11) NOT NULL,  `title` varchar(70) NOT NULL,  `text` text NOT NULL,  PRIMARY KEY  (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_rules_cats` (  `id` int(11) NOT NULL auto_increment,  `name` varchar(50) NOT NULL,  `position` int(11) NOT NULL,  PRIMARY KEY  (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_topics` (  `id` int(11) NOT NULL auto_increment,  `fid` int(11) NOT NULL,  `name` varchar(100) NOT NULL default \'\',  `user_id` int(11) NOT NULL,  `date` int(11) NOT NULL,  `last_user_id` int(11) NOT NULL,  `last_date` int(11) NOT NULL,  `first_post` int(11) NOT NULL,  `first_post_on_pages` enum(\'0\',\'1\') NOT NULL COMMENT \'0\',  `not_edit_author` enum(\'0\',\'1\') NOT NULL COMMENT \'0\',  `answer_to` int(11) NOT NULL,  `count_posts` int(11) NOT NULL,  `open` int(11) NOT NULL,  `top` enum(\'0\',\'1\') NOT NULL,  `level` enum(\'0\',\'1\',\'2\',\'3\') NOT NULL,  `level_posts` enum(\'0\',\'1\',\'2\',\'3\') character set utf8 NOT NULL,  `count_all_views` int(11) NOT NULL,  `count_views` int(11) NOT NULL,  PRIMARY KEY  (`id`),  KEY `author_id` (`user_id`),  KEY `fid` (`fid`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_topics_bookmarks` (  `tid` int(11) NOT NULL,  `user_id` int(11) NOT NULL,  `date` int(11) NOT NULL,  PRIMARY KEY  (`tid`,`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_topics_logs` (  `tid` int(11) NOT NULL,  `date` int(11) NOT NULL,  `user_id` int(11) NOT NULL,  `text` text NOT NULL,  `ip` bigint(20) NOT NULL,  `ua` varchar(250) NOT NULL,  KEY `tid` (`tid`)) ENGINE=MyISAM DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_topics_views` (  `tid` int(11) NOT NULL,  `user_id` int(11) NOT NULL,  `date` int(11) NOT NULL,  PRIMARY KEY  (`tid`,`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_users` (  `id` int(11) NOT NULL auto_increment,  `login` varchar(40) NOT NULL,  `nick` varchar(40) NOT NULL,  `password` varchar(32) NOT NULL,  `active` enum(\'0\',\'1\') NOT NULL default \'0\',  `level` enum(\'1\',\'2\',\'3\') NOT NULL default \'1\',  `date_reg` int(11) NOT NULL,  `date_last_visit` int(11) NOT NULL,  `set_onpage_topics` tinyint(4) NOT NULL,  `set_onpage_posts` tinyint(4) NOT NULL,  `set_fast_post` enum(\'0\',\'1\') NOT NULL,  `set_time_shift` tinyint(2) NOT NULL,  `ip` bigint(20) NOT NULL,  `ua` varchar(250) NOT NULL,  `page` varchar(250) NOT NULL,  `info_name` varchar(50) NOT NULL,  `info_city` varchar(70) NOT NULL,  `info_sex` enum(\'0\',\'1\') NOT NULL,  `info_icq` int(9) NULL,  `punish_ban` enum(\'0\',\'1\') NOT NULL,  `punish_pid` int(11) NOT NULL,  `punish_to_date` int(11) NOT NULL,  PRIMARY KEY  (`id`),  UNIQUE KEY `login` (`login`),  UNIQUE KEY `nick` (`nick`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251',
	'CREATE TABLE `mf_users_punishes` (  `id` int(11) NOT NULL auto_increment,  `user_id` int(11) NOT NULL,  `punished_user_id` int(11) NOT NULL,  `rule` int(11) NOT NULL,  `date` int(11) NOT NULL,  `to_date` int(11) NOT NULL,  `comment` tinytext NOT NULL,  `pid` int(11) NOT NULL,  `ban` enum(\'0\',\'1\') NOT NULL,  `close_private` enum(\'0\',\'1\') NOT NULL,  `ip` bigint(20) NOT NULL,  `ua` varchar(250) NOT NULL,  PRIMARY KEY  (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251',
	);

$allcfg_ini_pattern = '[db]
host={$server}
user={$user_name}
password={$user_password}
database={$db}
prefix=mf_
[db_localhost]
host={$server}
user={$user_name}
password={$user_password}
database={$db}
prefix=mf_
[other]
root={$root}';

if(file_exists('sys/cfg/allcfg.ini') && filesize('sys/cfg/allcfg.ini') > 0)die('Скрипт уже установлен!');

echo '<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"><head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> <link rel="stylesheet" href="style/style.css" type="text/css" /> <title>Установка</title> <!-- Created by Morgan --></head><body>';

		function xchmod($file){ return decoct(fileperms($file)) % 1000; }

$step = isset($_GET['step']) && (int)$_GET['step'] > 0 ? (int)$_GET['step'] : 1;

		switch($step)
	{
	default:
	
	echo '<div class="head">Проверка всех файлов</div><br />';

	
	$files = array
		(
		'sys/tpl/',
		'sys/tpl/admin.page.tpl',
		'sys/tpl/captcha.block.tpl',
		'sys/tpl/confirm.block.tpl',
		'sys/tpl/err.block.tpl',
		'sys/tpl/footer.tpl',
		'sys/tpl/forum.page.tpl',
		'sys/tpl/header.tpl',
		'sys/tpl/index.page.tpl',
	 	'sys/tpl/login.page.tpl',
		'sys/tpl/msg.block.tpl',
		'sys/tpl/post.page.tpl',
		'sys/tpl/topic.page.tpl',
		'sys/tpl/umenu.page.tpl',
		'sys/tpl/user.block.tpl',
		'sys/tpl/user.page.tpl',
		'sys/tpl_compile/',	
		'sys/cfg/allcfg.ini',
		'sys/cfg/sitemap.xml',		
		'install.php'
		);
		
	$error = false;
	
			for($c = count($files), $i = 0;$i < $c;$i ++)
		{
		if(file_exists($files[$i]))
			{
			if(is_writable($files[$i]))
				{
				echo 'Запись разрешена : <font color="green">'.$files[$i].'</font><br />';
				}
			else
				{
				$error = true;
				echo 'Запись запрещена : <font color="red">'.$files[$i].'</font><br />';
				echo 'Поставьте на данный файл права доступа (chmod) 777, в данный момент права доступа '.xchmod($files[$i]).'<br />';
				}			
			}
		else
			{
			$error = true;
			echo 'Файл '.$files[$i].' <font color="red">не существует</font><br />';
			}
		}
		
	if($error)echo '<font color="red">Возникли ошибки. Продолжение установки невозможно.</font><br />';
	else echo '<a href="install.php?step=2">Далее</a>&raquo;<br />';	
	
	break;
	##########################################################################################################################
	case 2:
	
	echo '<div class="head">Проверка совместимости ПО</div><br />';
	
	$error = false;
	
	if(version_compare(PHP_VERSION, '5.1.0', '>='))
		{
		echo 'PHP : <font color="green">'.PHP_VERSION.'</font><br />';
		}
	else
		{
		$error = true;
		echo 'PHP : <font color="red">'.PHP_VERSION.'</font> (а требуется 5.2.1)<br />';
		}
		
	if(version_compare(GD_VERSION, '2.0.1', '>='))
		{
		echo 'GDlib : <font color="green">'.GD_VERSION.'</font><br />';
		}
	else
		{
		$error = true;
		echo 'GDlib : <font color="red">'.GD_VERSION.'</font> (а требуется 2.0.1)<br />';
		}
		
	
		
	if(extension_loaded('mysql'))
		{
		echo 'MySQL : <font color="green">Установлено</font><br />';
		}
	else
		{
		$error = true;
		echo 'MySQL : <font color="red">Не установлено</font><br />';
		}

		
	if(extension_loaded('mbstring'))
		{
		echo 'MbString : <font color="green">Установлено</font><br />';
		}
	elseif(extension_loaded('iconv'))
		{
		echo 'Iconv : <font color="green">Установлено</font><br />';
		}
	else
		{
		$error = true;
		echo 'MbString || Iconv : <font color="red">Не установлено</font><br />';
		}
	
	$apache_modules = apache_get_modules();
	if(in_array('mod_rewrite', $apache_modules))
		{
		echo 'Mod Rewrite : <font color="green">Установлен</font><br />';
		}
	else
		{
		$error = true;
		echo 'Mod Rewrite : <font color="red">Не установлен</font><br />';
		}
		
	if(function_exists('gzdeflate'))
		{
		echo 'Zlib : <font color="green">Установлен</font><br />';
		}
	else
		{
		$error = true;
		echo 'Zlib : <font color="red">Не установлен</font><br />';
		}
		
	if($error)echo '<font color="red">Возникли ошибки. Продолжение установки невозможно.</font><br />';
	else echo '<a href="install.php?step=3">Далее</a>&raquo;<br />';
	
	
	break;
	##########################################################################################################################
	case 3:
	
	echo '<div class="head">Настройка</div><br />';
	
	$path = str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));
	if(substr($path, -1) != '/')$path .= '/';
	
	echo '<form action="install.php?step=4" method="post">';
	echo 'Сервер : <br />';
	echo '<input type="text" name="server" value="localhost"/><br />';
	echo 'Имя пользователя : <br />';
	echo '<input type="text" name="user_name" value="root"/><br />';
	echo 'Пароль пользователя : <br />';
	echo '<input type="password" name="user_password"/><br />';
	echo 'База данных : <br />';
	echo '<input type="text" name="db"/><br />';
	echo '<label><input type="checkbox" name="not_import_tables" value="1"/>Не импортировать таблицы (если таблицы у вас уже залиты)</label><br />';
	echo 'Папка, куда устанавливается скрипт : <br />';
	echo '<input type="text" name="path" value="'.$path.'"/><br />';
	echo '<input type="submit" value="Далее"/>';
	
	echo '</form>';
	
	break;
	#########################################################################################################################
	case 4:
	
	if(!isset($_POST['server']) || !isset($_POST['user_name']) || !isset($_POST['user_password']) || !isset($_POST['db']) || !isset($_POST['path']))
		{
		header('Location: install.php?step=3');
		exit;
		}
		
	echo '<div class="head">Завершение установки</div><br />';
	
	$server = trim($_POST['server']);
	$user_name = trim($_POST['user_name']);
	$user_password = trim($_POST['user_password']);
	$db = trim($_POST['db']);
	$path = $_POST['path'];
	
	$root = $_SERVER['DOCUMENT_ROOT'].'/';
	
	if(!file_exists($_SERVER['DOCUMENT_ROOT'].'/robots.txt') || file_get_contents($_SERVER['DOCUMENT_ROOT'].'/robots.txt') != file_get_contents('robots.txt'))
		{
		$root .= (substr($path, 0, 1) == '/' ? substr($path, 1) : $path);
		}

	
	if(($connect = mysql_connect($server, $user_name, $user_password)))
		{
		if(mysql_select_db($db, $connect))
			{
			$error = false;
			
			if(!isset($_POST['not_import_tables']))
				{
						for($c = count($sqls), $i = 0;$i < $c;$i ++)
					{
					if(mysql_query(str_replace('{$path}', $path, $sqls[$i])) === false)$error = true;				
					}
					
				}
				
			if($error)echo '<font color="red">Возникла ошибка во время импорта базы данных.</font><br />';
			else
				{
							
				
				if(file_put_contents('sys/cfg/allcfg.ini', str_replace(array('{$server}', '{$user_name}', '{$user_password}', '{$db}', '{$root}'), array($server, $user_name, $user_password, $db, $root), $allcfg_ini_pattern)))					
					{
					
					
					echo '<font color="green"><b>Скрипт успешно установлен!</b></font><br />';
					echo 'База данных импортирована, настройки записаны.<br />';
					echo 'Теперь вы можете <a href="index.php">зайти</a> на форум и <a href="login.php?mode=login">зарегистрироваться</a>.<br />';
					echo 'Первый зарегистрированный пользователь автоматически становится администратором.<br />';
					if(@unlink('install.php'))echo 'Во избежании неудобств, установочный файл удален.<br />';
					else echo 'Также удалите файл install.php<br />';
					
					echo 'Если не удалось удалить файл, сделайте это самостоятельно.<br />';
					echo '<br />';					
					echo 'Удачного пользования :)<br />';
					
					}
				else
					{
					echo '<font color="red">Не удается записать файл sys/cfg/allcfg.ini</font><br />';		
					}				
				}	
						
			}
		else
			{
			echo '<font color="red">Невозможно выбрать базу данных.</font><br />';
			}		
		}
	else
		{
		echo '<font color="red">Невозможно подключиться к серверу. Проверьте имя пользователя и пароль.</font><br />';
		}
	
	break; 
	}

echo '<div class="foot">&copy;Morgan</div></body></html>';
ob_end_flush();
exit;

# Morgan
?>