View file admin.php

File size: 52.46Kb
<?php
require 'system/core.php';

session_name('SLS_SSID');
session_start();

if(!isset($_SESSION['auth']))$_SESSION['auth'] = 0;

if($_SESSION['auth'] == 0 && isset($_GET['login']) && isset($_GET['password']))
	{
	if($_GET['login'] == $config['admin']['login'] && $_GET['password'] == $config['admin']['password'])
		{
		$_SESSION['auth'] = 1;
		$_SESSION['getauth'] = 1;
		}
	}

if($_SESSION['auth'] == 0 && (empty($_SERVER['PHP_AUTH_USER']) || empty($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_USER'] != $config['admin']['login'] || $_SERVER['PHP_AUTH_PW'] != $config['admin']['password']))
	{
	header('WWW-Authenticate: Basic realm="SLS CMSv'.SLSVER.'"');
	header('HTTP/1.0 401 Unauthorized');
	header('Content-type: text/html; charset=utf-8');
	exit('<html><head><title>Ошибка авторизации</title></head><body><h1>Ошибка авторизации</h1></body></html>');
	}

function xchmod($file){return decoct(fileperms($file)) % 1000;}
function ext($file){return strtolower(pathinfo($file,PATHINFO_EXTENSION));}
function to($uri){header('Location: '.$uri); exit;}


		function del($file)
	{
	if(!file_exists($file))return false;

	if(is_dir($file))
		{
		$od = opendir($file);
				while(($rd = readdir($od)) !== false)
			{
			if($rd == '.' || $rd == '..')continue;

#			if(is_dir($file.'/'.$rd))del($file.'/'.$rd);
#			else
			del($file.'/'.$rd);

			}

		closedir($od);

		@chmod($file,0777);
		return (rmdir($file));

		}
	else
		{
		@chmod($file,0777);
		return (unlink($file));
		}

	}

		function lines($data)
	{
	if(is_string($data))
		{
		$string = true;
		$data = explode('<br />',$data);
		}

	$c = count($data);
	$maxlen = strlen($c);

			for($i = 0;$i < $c;$i ++)
		{
		$data[$i] = '<span class="line">#'.(strlen($i + 1) < $maxlen ? str_repeat('&nbsp;',($maxlen - strlen($i + 1))) : null).($i + 1).'</span>'.trim($data[$i]);
		}
	if(isset($string))
		{
		$data = implode('<br />',$data);
		}

	return $data;

	}

		function page($str,$page,$uri)
	{
	if($str <= 1)return ;
	show('<p style="margin-left: 2px">',false);
	if($page > 3)show('&lt;&lt;<a href="'.str_replace('{$page}',1,$uri).'">В начало</a> ',false);
	if($page > 1)show('&lt;<a href="'.str_replace('{$page}',$page - 1,$uri).'">Назад</a> ',false);
	show(' <small>Страница <b>'.$page.'</b> из <b>'.$str.'</b></small> ',false);
	if($str > $page)show('<a href="'.str_replace('{$page}',$page + 1,$uri).'">Вперед</a>&gt; ',false);
	if(($str - $page) >= 2)show('<a href="'.str_replace('{$page}',$str,$uri).'">В конец</a>&gt;&gt;',false);
	show('</p>',false);
	}

		function mime_type($ext)
	{
			switch ($ext)
		{
		default:
		return 'application/octet-stream';
		break;

		case 'jar':
		return 'application/java-archive';
		break;

		case 'jad':
		return 'text/vnd.sun.j2me.app-descriptor';
		break;

		case 'cab':
		return 'application/vnd.ms-cab-compressed';
		break;

		case 'sis':
		return 'application/vnd.symbian.install';
		break;

		case 'zip':
		return 'application/x-zip';
		break;

		case 'rar':
		return 'application/x-rar-compressed';
		break;

		case '7z':
		return 'application/x-7z-compressed';
		break;

		case 'gz':
		case 'tgz':
		return 'application/x-gzip';
		break;

		case 'bz':
		case 'bz2':
		return 'application/x-bzip';
		break;

		case 'jpg':
		case 'jpe':
		case 'jpeg':
		return 'image/jpeg';
		break;

		case 'gif':
		return 'image/gif';
		break;

		case 'png':
		return 'image/png';
		break;

		case 'txt':
		case 'dat':
		case 'php':
		case 'php4':
		case 'php5':
		case 'phtml':
		case 'htm':
		case 'html':
		case 'shtm':
		case 'shtml':
		case 'wml':
		case 'css':
		case 'js':
		case 'xml':
		case 'sql':
		case 'slsp':
		case 'slss':
		return 'text/plain';
		break;

		case 'mmf':
		return 'application/x-smaf';
		break;

		case 'mid':
		return 'audio/mid';
		break;

		case 'mp3':
		return 'audio/mpeg';
		break;

		case 'amr':
		return 'audio/amr';
		break;

		case 'wav':
		return 'audio/x-wav';
		break;

		case 'mp4':
		return 'video/mp4';
		break;

		case 'wmv':
		return 'video/x-ms-wmv';
		break;

		case '3gp':
		return 'video/3gpp';
		break;

		case 'avi':
		return 'video/x-msvideo';
		break;

		case 'mpg':
		case 'mpe':
		case 'mpeg':
		return 'video/mpeg';
		break;

		case 'pdf':
		return 'application/pdf';
		break;

		case 'doc':
		case 'docx':
		return 'application/msword';
		break;

		case 'swf':
		return 'application/x-shockwave-flash';
		break;

		}
	}


$page = (!empty($_GET['page']) && $_GET['page'] > 0) ? $_GET['page'] : 1;

$mode = !empty($_GET['do']) ? $_GET['do'] : null;

if($mode != 'phpinfo')
	{
	header('Content-type: text/html;charset=utf-8');
	header('Cache-control: no-cache');

	show('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',false);
	show('<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">',false);
	show('<head>',false);
	show('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />',false);
	show('<title>SLS CMSv'.SLSVER.' :: Admin Panel</title>',false);
	show('<style type="text/css">.code{color:#f08000;background-color:#E9E9E9;font-size : 13px; overflow: auto;font-family: Courier New, Courier, monospace;} .line{background-color:#000000;color:#f0f0f0;} .window{padding: 2px;background-color: #E6E6E6;border: 2px inset;} .slstag{color: #00C400;border: 1px solid #808080;} a,a:visited,a:link{color:#0000A0;text-decoration:none;} a:hover{color:#000080;text-decoration:underline;}</style>',false);
	show('</head><body>',false);
	}

ob_start();

		switch($mode)
	{
	default:
	show('<h3>Админка</h3>',false);
	show('<hr/>',false);
	show('&raquo; <a href="'.$_SERVER['SCRIPT_NAME'].'?do=files">Менеджер файлов</a>');
	show('&raquo; <a href="'.$_SERVER['SCRIPT_NAME'].'?do=help">Помощь по SLS</a>');
	show('&raquo; <a href="'.$_SERVER['SCRIPT_NAME'].'?do=set">Настройки системы</a>');
	show('&raquo; <a href="'.$_SERVER['SCRIPT_NAME'].'?do=phpinfo">PHPinfo</a>('.phpversion().')');
	show('e <a href="'.$_SERVER['SCRIPT_NAME'].'?do=eval">Выполнение PHP кода</a>');
	if(isset($_SESSION['getauth']))show('x <a href="'.$_SERVER['SCRIPT_NAME'].'?do=unsess">Выход</a>');
	show('<br />',false);
	show('&laquo; <a href="index.php">index.php</a>');
	break;
	#############################################################################
	case 'files':

	$dir = 'pages';
	$dir2 = 'pages/';
	if(isset($_GET['dir']))
		{
		$dir = rawurldecode(trim($_GET['dir']));
		if(!is_dir($dir))error('Папка не существует');
		if(substr($dir,-1,1) == '/')$dir = substr($dir,0,-1);
		$dir2 = $dir.'/';
		}

	show('<h3>Список файлов "'.(isset($_GET['act']) ? '<a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'">'.$dir2.'</a>' : $dir2).'"'.(!empty($dir) ? (isset($_GET['deldir']) ? (isset($_GET['yes']) ? (del($dir) ? die('<br /><b>Папка успешно удалена</b>') : '[ошибка]') : '[<a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.$dir.'&deldir&yes&">подтвердить удалениее</a>]' ) : '[<a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.$dir.'&deldir&">удалить</a>]') : null).'</h3>',false);

	show('<hr/>',false);

			switch(isset($_GET['act']) ? $_GET['act'] : null)
		{
		default:

		$files = array();

		$od = opendir($dir2);
				while(($rd = readdir($od)) !== false)
			{
			if($rd == '.' || $rd == '..')continue;
			$files[] = $rd;
			}

		closedir($od);

		$count = count($files);

		show('Найдено файлов : <b>'.$count.'</b>');

		if(substr_count($dir,'/') > 2)show('&lt;&lt;<a href="'.$_SERVER['SCRIPT_NAME'].'?do=files">...</a>');
		if(!empty($dir))show('&lt;<a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode(dirname($dir)).'">..</a>');

		if($count > 0)
			{

			if(empty($_COOKIE['adm_onpage']))
				{
				setcookie('adm_onpage',10,$sys['t'] + 2592000);
				$_COOKIE['adm_onpage'] = 10;
				}
			elseif(isset($_POST['onpage']))
				{
				setcookie('adm_onpage',intval($_POST['onpage']),$sys['t'] + 2592000);
				$_COOKIE['adm_onpage'] = intval($_POST['onpage']);
				}


			$str = ceil($count / $_COOKIE['adm_onpage']);
			if($page > $str)to($_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&page='.$str);

			$start = ($page - 1) * $_COOKIE['adm_onpage'];
			$end = $start + $_COOKIE['adm_onpage'];
			if($count < $end)$end = $count;

					for($i = $start;$i < $end;$i ++)
				{
				if(is_dir($dir2.$files[$i]))show('&gt;<a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode(($dir2 == './' ? null : $dir2).$files[$i]).'">'.(in_array(substr(substr(realpath($dir2.$files[$i]),strlen($_SERVER['DOCUMENT_ROOT'])),strlen($config['other']['path'])),array('pages','system')) ? '<font color="#800000">'.$files[$i].'</font>' : $files[$i]).'</a>');
				else
					{
					show('<u>'.($i + 1).'.</u> <a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode(($dir2 == './' ? null : $dir2).$files[$i]).'">',false);

					$ext = ext($files[$i]);

					if(substr(substr(substr(realpath($dir2.$files[$i]),strlen($_SERVER['DOCUMENT_ROOT'])),strlen($config['other']['path'])),0,5) == 'pages' && $ext == 'slsp')
						{
						show('<font color="#008000">'.$files[$i].(preg_match('#<!-- SLS\|PageTitle:([^>]*) -->#ui',file_get_contents($dir2.$files[$i]),$ptitle) ? ' : '.$ptitle[1] : null).'</font>',false);
						}
					elseif(substr(substr(substr(realpath($dir2.$files[$i]),strlen($_SERVER['DOCUMENT_ROOT'])),strlen($config['other']['path'])),0,6) == 'system' && (in_array($ext,array('slss','php')) || $files[$i] == 'config.ini'))
						{
						show('<font color="'.($ext == 'slss' ? '#FF8000' : '#0080FF').'">'.$files[$i].'</font>',false);
						}
					elseif(in_array(substr(substr(realpath($dir2.$files[$i]),strlen($_SERVER['DOCUMENT_ROOT'])),strlen($config['other']['path'])),array('index.php',basename($_SERVER['SCRIPT_NAME']))))
						{
						show('<font color="#f00000">'.$files[$i].'</font>',false);
						}
					else
						{
						show($files[$i],false);
						}

					show('</a> ('.round(filesize($dir2.$files[$i]) / 1024,2).'кб/'.date('G:i d M',filemtime($dir2.$files[$i])).') [<a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode(($dir2 == './' ? null : $dir2).$files[$i]).'&act=color">V</a>,<a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode(($dir2 == './' ? null : $dir2).$files[$i]).'&act=download">D</a>,<a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode(($dir2 == './' ? null : $dir2).$files[$i]).'&act=clean&del&">X</a>]');
					}
				}

			page($str,$page,$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&page={$page}');

			show('<br />',false);
			show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'" method="post">',false);
			show('<input name="onpage" type="text" value="'.$_COOKIE['adm_onpage'].'" size="4" maxlength="6"/> файлов на страницу',false);
			show('<input type="submit" value="&gt;&gt;&gt;"/>',false);
			show('</form>',false);

			}
		else
			{
			show('<b>В данной папке нет файлов</b>',false);
			}

		show('<hr/>',false);
		show('Создать <a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&act=adddir&'.$rand.'">папку</a> / <a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&act=addfile&'.$rand.'">файл</a>');
		show('<a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&act=upload&'.$rand.'">Загрузить</a> / <a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&act=import&'.$rand.'">импортировать</a> файл');


		break;
		#########################################################################
		case 'adddir':

		if(isset($_GET['yes']))
			{
			$name = trim($_POST['namedir']);

			if(!file_exists($dir2.$name))
				{
				if(mkdir($dir2.$name,0777))
					{
					show('<b>Папка успешно создана</b><br /><a href="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.$dir2.$name.'">'.$name.'</a>');
					}
				}
			else
				{
				show('<b>Папка '.$dir2.$name.' уже существует!</b>');
				}

			}


		show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&act=adddir&yes&'.$rand.'&" method="post">',false);
		show('Новая папка :');
		show('<input name="namedir" type="text" value="testdir">');
		show('<input type="submit" value="Создать">',false);
		show('</form>',false);

		break;
		#########################################################################
		case 'addfile':

		if(isset($_GET['yes']))
			{
			$name = trim($_POST['namefile']);

			if(!file_exists($dir2.$name))
				{

				$templates = array(
				'',
				'<?php'."\r\n\r\n\r\n\r\n".'?>',
				'<!-- SLS|PageTitle:'.basename($name,'.slsp').' -->'."\r\n".'<!-- SLS|PageVersion:html -->');

				if(file_put_contents($dir2.$name,(!empty($_POST['template']) ? $templates[intval($_POST['template'])] : null)))
					{
					show('<b>Файл успешно создан</b><br /><a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.$dir2.$name.'">'.$name.'</a>');
					}
				}
			else
				{
				show('<b>Файл '.$dir2.$name.' уже существует!</b>');
				}

			}

		show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&act=addfile&yes&'.$rand.'&" method="post">',false);
		show('Новый файл :');
		show('<input name="namefile" type="text" value="testfile.slsp">');
		show('Шаблон :');
		show('<select size="1" name="template"/><option value="0">Нет</option><option value="1">PHP file</option><option value="2">SLS file</option></select>');
		show('<input type="submit" value="Создать">',false);
		show('</form>',false);

		break;
		#########################################################################
		case 'upload':

		if(isset($_GET['yes']))
			{
			$file = $_FILES['file'];
			if($file['error'] == 0)
				{
				if(!empty($_POST['name']))$name = trim($_POST['name']);
				else $name = basename($file['name']);
				if(!file_exists($dir2.$name) || isset($_POST['rewrite']))
					{
					if(copy($file['tmp_name'],$dir2.$name))
						{
						show('<b>Файл успешно сохранен</b><br /><a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.$dir2.$name.'">'.$name.'</a>');
						}
					else
						{
						show('Ошибка при сохранении');
						}
					}
				else
					{
					show('Файл <b>'.$dir2.$name.'</b> уже существует');
					}
				}
			else
				{
				show('Ошибка при загрузке');
				}
			}
		else
			{
			show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&act=upload&yes&'.$rand.'&" method="post" enctype="multipart/form-data">',false);
			show('Файл :');
			show('<input type="file" name="file"/>');
			show('Сохранить как (можно не указывать) :');
			show('<input name="name" type="text"/>');
			show('<input name="rewrite" type="checkbox" value="1" checked>Перезаписывать, если существует');
			show('<input type="submit" value="Загрузить"/>',false);
			show('</form>',false);
			}

		break;
		#########################################################################
		case 'import':

		if(isset($_GET['yes']))
			{
			$url = trim($_POST['url']);
			if(($cnt = trim(file_get_contents($url))) !== false)
				{
				if(!empty($_POST['name']))$name = trim($_POST['name']);
				else $name = basename($url);
				if(!file_exists($dir2.$name) || isset($_POST['rewrite']))
					{
					if(file_put_contents($dir2.$name,$cnt))
						{
						show('<b>Файл успешно сохранен</b><br /><a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.$dir2.$name.'">'.$name.'</a>');
						}
					else
						{
						show('Ошибка при сохранении');
						}
					}
				else
					{
					show('Файл <b>'.$dir2.$name.'</b> уже существует');
					}
				}
			else
				{
				show('Ошибка при загрузке');
				}
			}
		else
			{
			show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=files&dir='.rawurlencode($dir2).'&act=import&yes&'.$rand.'&" method="post">',false);
			show('Адрес :');
			show('<input type="text" name="url"/>');
			show('Сохранить как (можно не указывать) :');
			show('<input name="name" type="text"/>');
			show('<input name="rewrite" type="checkbox" value="1" checked>Перезаписывать, если существует');
			show('<input type="submit" value="Загрузить"/>');
			}

		break;
		}

	break;
	#############################################################################
	case 'file':

	$file = rawurldecode(trim($_GET['f']));

	if(!file_exists($file))error('Файл не найден');

	$dir = dirname($file);

	show('<h3>Файл "<a href="'.$_SERVER['SCRIPT_NAME'].'?do=files'.(!empty($dir) && $dir != '.' ? '&dir='.rawurlencode($dir) : null).'&'.$rand.'&">'.dirname($file).'</a>/'.basename($file).'"</h3>',false);
	show('<a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&'.$rand.'&">Редактировать</a> '.(ext($file) == 'slsp' && substr($dir,0,5) == 'pages' ? '| <a href="index.php?f='.rawurlencode(substr($file,6,-5)).'">Просмотр</a>' : null).' | <a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=info&'.$rand.'&">Информация</a> | <a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=clean&'.$rand.'&">Удалить/Очистить</a> | <a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=color&'.$rand.'&">Подсветка'.(($ext = ext($file)) == 'php' || $ext == 'phtml' || $ext == 'php3' || $ext == 'php4' || $ext == 'php5' || $ext == 'inc' ? ' PHP' : null).' кода</a> | <a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=copy&'.$rand.'&">Копировать</a> | <a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=recode&'.$rand.'&">Перекодировка</a> | <a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=download&'.$rand.'&">Скачать</a>');

			switch($act = !empty($_GET['act']) ? $_GET['act'] : null)
		{
		default:

		$cnt = file($file);
		$count = count($cnt);

		if(empty($_COOKIE['adm_onpage_edit']))
			{
			setcookie('adm_onpage_edit',20,$sys['t'] + 2592000);
			$_COOKIE['adm_onpage_edit'] = 20;
			}
		elseif(isset($_POST['onpage_edit']))
			{
			setcookie('adm_onpage_edit',intval($_POST['onpage_edit']),$sys['t'] + 2592000);
			$_COOKIE['adm_onpage_edit'] = intval($_POST['onpage_edit']);
			}

		$end = $page * $_COOKIE['adm_onpage_edit'];
		$start = $end - $_COOKIE['adm_onpage_edit'];
		if($end > $count)$end = $count;

		$str = ceil($count / $_COOKIE['adm_onpage_edit']);
		if(!empty($cnt) && $page > $str)to($_SERVER['SCRIPT_NAME'].'?do=file&f='.$file.'&page='.$str);

		if(isset($_GET['save']) && isset($_POST['save']))
			{
			show('<hr/>',false);
			$text = trim($_POST['text']);

			$cnt[$start] = $text."\r\n";

					for($i = ($start + 1);$i < $end;$i ++)
				{
				unset($cnt[$i]);
				}

#			$cnt[$start + 1] = $text;

#			dump($cnt);

#			file_put_contents($file.'.bak',trim(implode('',$cnt)));

#			die();

			if(isset($_POST['backup']))
				{
				setcookie('adm_backup',1,$sys['t'] + 2592000);
				if(copy($file,$file.'.bak'))show('<b>'.$file.'.bak</b> успешно сохранен');
				else error('Ошибка, при сохранении исходника');
				}
			else
				{
				setcookie('adm_backup',0,$sys['t'] + 2592000);
				}

			if(file_put_contents($file,trim(implode('',$cnt))))to($_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&page='.$page);
			else error('Ошибка');

			}

		show('<small>Строки : '.$start.' - '.$end.' ('.$count.','.$_COOKIE['adm_onpage_edit'].') / Размер : '.round(filesize($file) / 1024,3).'кб</small>',false);
		show('<hr/>',false);
		show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&page='.$page.'&save&'.$rand.'&" method="post">',false);
		show('<input name="save" type="hidden" value="1">',false);
		show('Содержание файла :');
		show('<textarea name="text" rows="'.(min($count,$_COOKIE['adm_onpage_edit']) + 2).'" cols="'.($http['web'] ? 100 : 40).'" wrap="off">',false);

# (($count < $config['admin']['online'] ? $count : $config['admin']['online']) + 1)

				for($i = $start;$i < $end;$i ++)
			{
			show(htmlspecialchars(trim($cnt[$i])),false);
			if(($i + 1) != $end)show("\r\n",false);
			}

		show('</textarea>');

/*
		$cnt = htmlspecialchars(trim(file_get_contents($file)));

		echo 'Содержание файла : <br />';
		echo '<textarea name="text" rows="10" cols="40" wrap="off">'.$cnt.'</textarea><br />';
*/
		show('<input type="submit" value="Сохранить">');
		show('<input name="backup" type="checkbox" value="1"'.(isset($_COOKIE['adm_backup']) && $_COOKIE['adm_backup'] == 1 ? ' checked' : null).'>Сохранять исходник в файл <b>'.$file.'.bak</b>');
		show('</form>',false);

		show('<br />',false);
		show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'" method="post">',false);
		show('<input name="onpage_edit" type="text" value="'.$_COOKIE['adm_onpage_edit'].'" size="4" maxlength="6"/> строк на страницу',false);
		show('<input type="submit" value="&gt;&gt;&gt;"/>',false);
		show('</form>',false);

		page($str,$page,$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&page={$page}');

		break;
		#########################################################################
		case 'info':

		show('<hr/>',false);
		show('<b>'.dirname(realpath($file)).' \ <a href="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.$file.'">'.basename($file).'</a></b>');
		show('Изменен : <u>'.date('G:i:s d.m.Y',filectime($file)).'</u>');
		show('Размер : <u>'.round(filesize($file) / 1024,4).' кб</u>');
		show('Строк в файле : <u>'.count(file($file)).'</u>');
		show('CHMOD : <u>'.xchmod($file).'</u>');
		show('Mime Type при скачивании : <u>'.mime_type(ext($file)).'</u>');



		break;
		#########################################################################
		case 'clean':

		show('<hr/>',false);

		if(isset($_GET['yes']))
			{
			if(isset($_POST['delfile']))
				{
				if(unlink($file))show('Файл удален');
				else error('Ошибка при удалении файла');
				}
			else
				{
				if(file_put_contents($file,null) !== false)show('Файл очищен');
				else error('Ошибка при очистке файла');
				}
			}
		else
			{
			show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=clean&yes&'.$rand.'&" method="post">',false);
			show('<input name="delfile" type="checkbox" value="1"'.(isset($_GET['del']) ? ' checked' : null).'/>Удалить файл');
			show('<input type="submit" value="Пошел"/>',false);
			show('</form>',false);
			}

		break;
		#########################################################################
		case 'color':

		show('<hr/>',false);
		show('<p style="background-color:#EFEFEF"><div class="window">',false);

				function color_comm($str)
			{
			if(preg_match('~&lt;!--([[:space:]])?SLS\|.*([[:space:]])?--&gt;~',$str[0]))
				{
				return '<span class="slstag">'.$str[0].'</span>';
				}
			else
				{
				return '<span style="color:#f08000">'.$str[0].'</span>';
				}
			}

		if(($ext = ext($file)) == 'php' || $ext == 'phtml' || $ext == 'php3' || $ext == 'php4' || $ext == 'php5' || $ext == 'inc')show(lines(highlight_file($file,true)),false);
#		else show(lines(nl2br(preg_replace("~(&quot;|&#039;)[^<>]*(&quot;|&#039;)~iU",'<span style="color:#DD0000">$0</span>',preg_replace_callback("~&lt;!--.*--&gt;~iU",'color_comm',preg_replace("~(&lt;[^\s!]*\s)([^<>]*)([/?]?&gt;)~iU",'$1<span style="color:#007700">$2</span>$3',preg_replace('~&lt;[^<>]*&gt;~iU','<span style="color:#0000BB">$0</span>',htmlspecialchars(file_get_contents($file),ENT_QUOTES))))))));
		else show('<code>'.lines(nl2br(preg_replace("~(&quot;|&#039;)[^<>]*(&quot;|&#039;)~iU",'<span style="color:#DD0000">$0</span>',preg_replace_callback("~&lt;!--.*--&gt;~iU",'color_comm',preg_replace("~(&lt;[^\s!]*\s)([^<>]*)([/?]?&gt;)~iU",'$1<span style="color:#007700">$2</span>$3',preg_replace('~&lt;[^<>]*&gt;~iU','<span style="color:#0000BB">$0</span>',htmlspecialchars(file_get_contents($file),ENT_QUOTES))))))).'</code>',false);

		show('</div></p>',false);

		break;
		#############################################################################
		case 'copy':

		show('<hr/>',false);

		if(isset($_POST['newname']))
			{
			$newname = trim($_POST['newname']);
			if(!file_exists($newname) || (isset($_POST['rewrite'])))
				{
				if(copy($file,$newname))
					{
					show('<b>Файл скопирован</b>');
					if(isset($_POST['delsource']))del($file);
					}
				else
					{
					error('Немогу скопировать');
					}
				}
			else
				{
				show('<b>Файл '.$newname.' уже существует</b>');
				}
			}
		else
			{
			show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=copy&'.$rand.'&" method="post">',false);
			show('Новое местоположение :');
			show('<input name="newname" type="text" value="'.$file.'">');
			show('<input name="delsource" type="checkbox" value="1">Удалить исходный файл');
			show('<input name="rewrite" type="checkbox" value="1" checked>Перезаписывать, если существует');
			show('<input type="submit" value="Пошел">',false);
			show('</form>',false);
			}

		break;
		#########################################################################
		case 'recode':

		show('<hr/>',false);

		if(!function_exists('iconv') && !function_exists('mb_convert_encoding'))error('Не установлены библиотеки : Iconv или MBstring<br />Перекодировка невозможна');

		$codes = array('utf-8','windows-1251','cp866','koi8-r');

		if(isset($_GET['yes']))
			{
			$from = trim($_POST['from']);
			$to = trim($_POST['to']);

			if(in_array($from,$codes) && in_array($to,$codes) && $from != $to)
				{
				$cnt = trim(file_get_contents($file));

				if(function_exists('mb_convert_encoding'))$cnt = mb_convert_encoding($cnt,$to,$from);
				else $cnt = iconv($from,$to,$cnt);

				if(isset($_POST['replace']))
					{
					if(file_put_contents($file,$cnt))
						{
						show('Кодировка сменена');
						}
					else
						{
						error('Невозможно записать данные');
						}
					}
				else
					{
					show('При смене кодировки <b>'.$from.' -> '.$to.'</b> текст будет иметь вид : ');
					show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=recode&yes&'.$rand.'&" method="post">',false);
					show('<input name="to" type="hidden" value="'.$to.'"/>',false);
					show('<input name="from" type="hidden" value="'.$from.'"/>',false);
					show('<input name="replace" type="hidden" value="1"/>',false);
					show('<input type="submit" value="Сохранить файл"/>');
					show('<div class="window"><i>'.nl2br($cnt).'</i></div>',false);
					show('<input type="submit" value="Сохранить файл"/>',false);
					show('</form>',false);
					}

				}
			else
				{
				error('Неверны исходные данные');
				}

			}
		else
			{
			show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=recode&yes&'.$rand.'&" method="post">',false);
			show('Из :');
			show('<select size="1" name="from"/>',false);
				for($i = 0;$i < 4;$i ++)show('<option value="'.$codes[$i].'"'.($i == 1 ? ' selected' : null).'>'.$codes[$i].'</option>',false);
			show('</select>');
			show('В :');
			show('<select size="1" name="to"/>',false);
				for($i = 0;$i < 4;$i ++)show('<option value="'.$codes[$i].'"'.($i == 0 ? ' selected' : null).'>'.$codes[$i].'</option>',false);
			show('</select>');
			show('<input name="replace" type="checkbox" value="1"/>Сразу менять кодировку, не спрашивать');
			show('<input type="submit" value="Сменить кодировку"/>',false);
			show('</form>',false);
			}

		break;
		#########################################################################
		case 'download':

		show('<hr/>',false);

		if(isset($_GET['yes']))
			{
			$type = intval($_POST['type']);
			if($type == 0 || $type == 1)
				{
				$name = trim($_POST['name']);
				$mimetype = trim($_POST['mimetype']);

				if(!empty($name) && !empty($mimetype))
					{

					ob_end_clean();

					header('HTTP/1.0 200 OK');

					header('Cache-Control: public, must-revalidate, max-age=0');
					header('Pragma: cache');

					$etag = md5($file);
					header('ETag: "'.substr($etag,0,4).'-'.substr($etag,5,5).'-'.substr($etag,10,8).'"');

					header('Keep-Alive: timeout=15, max=50');
					header('Connection: Keep-Alive');

					header('Accept-Ranges: bytes');
					header('Content-Length: '.filesize($file));

					header('Content-Type: '.$mimetype);

					header('Content-Disposition: '.($type == 1 ? 'attachment;' : null).'filename="'.$name.'"');
					readfile($file);
					exit;

					}
				else
					{
					error('Введены неверные данные');
					}
				}
			else
				{
				error('Введены неверные данные');
				}
			}
		else
			{
			show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=file&f='.rawurlencode($file).'&act=download&yes&'.$rand.'&" method="post">',false);
			show('Режим :');
			show('<select size="1" name="type"/>',false);
			show('<option value="0">Text</option><option value="1">Attach</option>',false);
			show('</select>');
			show('MimeType :');
			show('<input name="mimetype" type="text" value="'.mime_type(ext($file)).'"/>');
			show('Имя :');
			show('<input name="name" type="text" value="'.basename($file).'"/>');
			show('<input type="submit" value="Скачать"/>',false);
			show('</form>',false);
			}

		break;
		}


	break;
	#############################################################################
	case 'help':

	show('<h3>О проекте "SLS CMS"</h3>',false);
	show('<hr/>',false);
	show('<b>SLS</b>(Super Lite Site, дословно : Супер Легкий Сайт) <b>CMS</b> - это система управления содержимым сайта, написанная на PHP для построения небольших проектов.');
	show('В системе, страницы вашего сайта хранятся в виде отдельных файлов в директории pages/ с расширением SLSP.');
	show('Для построения сайта, не требующая знаний и особых усилий от вас, но позволяющая в какой то степени стандартизировать структуру страниц и наполнить их динамическими свойствами.');
	show('Нужно только знание основых HTML/WML тегов.');
	show('Страницы будут обладать некоторыми динамичными свойствами,к примеру, присутствует возможность создавать/переопределять переменные для хранения каких либо данных');
	show('Доступно использование некоторых функций, для вывода динамичной информации. (таких как вывод даты, вставка кода другого файла)');
	show('<br />',false);
	show('В админ-панели есть менеджер файлов, где вы можете редактирова/создавать/удалять страницы не прибегая к редактированию у себя на компьютере (телефоне) и загрузке их на сервер');

	show('<h3>Принцип работы</h3>',false);
	show('<hr/>',false);
	show('Принцип работы довольно прост.');
	show('<b>1.</b> Пользователь, запрашивает страницу, через специальный обработчик (index.php).');
	show('Указывает нужную ему страницу без расширения файла (.slsp), после знака вопроса (?) в аргументе "f".');
	show('Примеры названий файлов-страниц :');
	show('&nbsp;&nbsp;&nbsp;<b>/pages/index.slsp</b> - доступен по адресу <b>index.php?f=index</b>, если подключен MorRewrite то <b>/index.slsp</b>');
	show('&nbsp;&nbsp;&nbsp;<b>/pages/dir/index.slsp</b> - доступен по адресу <b>index.php?f=dir/index</b>, если подключен MorRewrite то <b>/dir/index.slsp</b>');
	show('Если у вас установлен модуль ModRewrite, вы можете указывать ссылки вида *файл страницы*.slsp');
	show('&nbsp;&nbsp;&nbsp;<b>Пример</b> : index.slsp (главная страница)');
	show('В название файла можно использовать символы : <b>A-z0-9-_</b>, если файл будет иметь название, в котором присутствутют другие символы, он будет недоступен из браузера');
	# show('&nbsp;&nbsp;&nbsp;<b></b> - доступен по адресу <b></b>, если подключен MorRewrite то <b></b>');
	show('<b>2.</b> Обработчик, проверяет, существует ли данный файл в папке со страницами (/pages/), и доступн ли он для прямого вызова.');
	show('<b>3.</b> Если файл может быть вызван, обработчик получает содержимое файла, подключает к нему содержимое файлов <b>/system/allup.slss</b> и <b>/system/alldown.slss</b>, до и после страницы соотвественно.');
	show('<b>4.</b> Происходит выполнение всех комманд, указанных в содержимом файл(ов).');
	show('<b>5.</b> В зависимости от указанной версии, обработчик посылает заголовки, а также, подключает шапку(head) и ноги(foot) соответственно выбранной версии.');
	show('Если существуют файлы :');
	show('&nbsp;&nbsp;&nbsp;<b>HTML версия</b> : <b>/system/fulluphtml.slsp</b> - он будет подключен в качестве шапки страницы, <b>/system/fulldownhtml.slsp</b> - будет подключен в качестве ног страницы.');
	show('&nbsp;&nbsp;&nbsp;<b>WML версия</b> : <b>/system/fullupwml.slsp</b> - он будет подключен в качестве шапки страницы, <b>/system/fulldownwml.slsp</b> - будет подключен в качестве ног страницы.');
	show('Если указанные файлы не существуют, будут использованные стандартные блоки вверха, и низа страниц.');
	show('<b>6.</b> Обработанная страница отдается пользователю.');
	show('<br />',false);
	show('<b>Примечание</b> : в файлах head\'ров и foot\'еров не происходит обработка, и исполнение SLS комманд.');

	show('<h3>Список основных комманд, для управлением работы SLS</h3>',false);
	show('<hr/>',false);
	show('Каждая комманда SLS, должна быть заключена в виде HTML-комментария, и иметь вид : <span class="code">&lt;!-- SLS|<i>произвольная_комманда</i> --&gt;</span>, пробел до и после "--" обязателен!');
	show('Что-бы заставить обработчик, вывести коммаду в виде текста, то есть не исполнив её, поставьте перед ней обратный слэш "\", в этом случае, комманда выведется в браузер как будто это простой текст.');
	show('[...] - указываются агрументы, которые должны присутствовать в комманде.');
	show('{...} - указываются агрументы, которые могут отсутствовать в комманде.');

	show('<h4>Основые комманды</h4>',false);
	show('<u>1.</u> <span class="code">&lt;!-- SLS|PageTitle:[name] --&gt;</span>');
	show('Определяет заголовок текущей страницы.');
	show('Стандартное значение указывается в файле конфигурации.');
	show('<u>2.</u> <span class="code">&lt;!-- SLS|PageVersion:[version] --&gt;</span>');
	show('Определяет версию текущей страницы.');
	show('Доступные значения : wml, html.');
	show('Стандартное значение указывается в файле конфигурации.');
	show('<u>3.</u> <span class="code">&lt;!-- SLS|PageNotDirectCall --&gt;</span>');
	show('Указывает на то что данный файл (страницу) нельзя вызвать прямо.');
	show('Такую комманду нужно включать например в файлы, которые будут подключаться к другим.');
	show('<u>4.</u> <span class="code">&lt;!-- SLS|PageAutoBr --&gt;</span>');
	show('При вставке данной комманды в файл, при обработке, будут автоматически расставлены HTML переносы строк (&lt;br /&gt;), перед \r\n.');
	show('<u>5.</u> <span class="code">&lt;!-- SLS|Include:[filename] --&gt;</span>');
	show('Вставляет в текущий файл, содержимое файла указанного в аргументе <b>filename</b>.');
	show('<b>filename</b> следует указывать БЕЗ расширения файлов (.slsp), и файл должен распологаться в папке /pages/.');
	show('<u>6.</u> <span class="code">&lt;!-- SLS|Header:"[header]"{;"header"} --&gt;</span>');
	show('Позволяет вставить заголовок (в параметре[ах] <b>header</b>) которые передастся пользователю.');
	show('Можно указывать несколько заголовков, каждый должен быть обрамлен двойными кавычками (<b>"</b>) и отделяться друг от дурга точкой с запятой (<b>;</b>)');

	show('<h4>Дополнительные комманды</h4>',false);
	show('<hr/>',false);
	show('<u>1.</u> <span class="code">&lt;!-- SLS|Date{:format} --&gt;</span>');
	show('Вставляет в документ, отформатированную по формату указанному в аргументе <b>format</b> текущую дату.');
	show('Синтаксис формата, аналогичен передаваемуму в PHP функцию <b>date()</b>');
	show('<u>2.</u> <span class="code">&lt;!-- SLS|MicroTime --&gt;</span>');
	show('Вставляет в документ, время генерации текущей страницы, вида : [секунды.миллисекунды{3}].');

	show('<h4>Работа с переменными</h4>',false);
	show('<hr/>',false);
	show('<u>1.</u> <span class="code">&lt;!-- SLS|Var:[varname] --&gt;</span>');
	show('Вставляет в документ значение внутренней переменной, с имененем <b>varname</b>.');
	show('<u>2.</u> <span class="code">&lt;!-- SLS|Var:[varname]=[varvalue] --&gt;</span>');
	show('Изменяет/Создает новую переменную с имененм <b>varname</b>, и значением <b>varvalue</b>');
	show('<br />',false);
	show('Изначально доступные переменные :');
	show('&nbsp;&nbsp;&nbsp;<b>ua</b> - браузер пользователя, безопасный для вывода в браузер.');
	show('&nbsp;&nbsp;&nbsp;<b>is_web</b> - определяет, веб браузер или нет. 1 - веб, 0 - нет.');
	show('&nbsp;&nbsp;&nbsp;<b>ip</b> - IP адрес пользователя.');
	show('&nbsp;&nbsp;&nbsp;<b>uri</b> - относительный путь, от корня сайта к текущей страницы.');
	show('&nbsp;&nbsp;&nbsp;<b>host</b> - домен');
	show('&nbsp;&nbsp;&nbsp;<b>unix_time</b> - метка текущего времени в формате UNIX TIMESTAMP.');
#	show('&nbsp;&nbsp;&nbsp;<b></b> - ');

	show('<h4>"Остатки" от PHP</h4>',false);
	show('<hr/>',false);
	show('<u>1.</u> <span class="code">&lt;!-- SLS|phpOn --&gt;[code]&lt;!-- SLS|phpOff --&gt;</span>');
	show('Обработчик выполняем указанный между этими блоками PHP код (обозначенный <b>code</b>), и вставляет в страницу.');
	show('&lt;?php и ?&gt; вставлять не нужно!');
	show('<u>2.</u> <span class="code">&lt;!-- SLS|phpColorOn --&gt;[code]&lt;!-- SLS|phpColorOff --&gt;</span>');
	show('Код указанный в <b>code</b> подсвечивается стандартной функцией highlight_string().');
	show('&lt;?php и ?&gt; можно и не вставлять!');
	# show('<u>.</u> <span class="code">&lt;!-- SLS| --&gt;</span>');

	show('<h3>Список файлов</h3>',false);
	show('<hr/>',false);
	show('<b>/pages/</b> - директория с файлами страниц.');
	show('<b>/system/</b> - директория системных для SLS файлов.');
	show('<b>/system/config.ini</b> - конфигурационный файл.');
	show('<b>/system/core.php</b> - часть движка, подключаемая во время работы.');
	show('<b>/system/versions.txt</b> - список версий движка, со всеми изменениями.');
	show('<br />',false);
	show('<b>/system/alldown.slsp</b> - подключаемый файл в любой версии (wml|html), после содержания страницы, но перед вывода конца.');
	show('<b>/system/allup.slsp</b> - подключаемый файл в любой версии (wml|html), перед содержанием страницы, но после вывода заголовков.');
	show('<b>/system/fulluphtml.slsp</b> - подключаемый файл заголовков, для HTML страниц.');
	show('<b>/system/fulldownhtml.slsp</b> - подключаемый файл ног, для HTML страниц.');
	show('<b>/system/fullupwml.slsp</b> - подключаемый файл заголовков, для WML страниц.');
	show('<b>/system/fulldownwml.slsp</b> - подключаемый файл ног, для WML страниц.');
	show('<br />',false);
	show('<b>/'.basename($_SERVER['SCRIPT_NAME']).'</b> - администраторская панель (можете переименовывать файл без ограничений, скрипт сам адаптируется к новому названию; только оставьте файл в текущей папке).');
	show('<b>/index.php</b> - обработчик.');
	show('<b>/robots.txt</b> - файл для поисковых роботов, запрещает индексирование директорий pages и system.');

	# show('<b></b> - .');

	show('<h3>Разработчик</h3>',false);
	show('<hr/>',false);
	show('Данный скрипт написан Morgan\'ом =)');
	show('Рапространяется бесплатно и не требует лицензии.');
	show('Вы можете редактировать исходные коды в своих нуждах, но после изменения вы не имеете право называть произведение вашего исскуства <b>SLS CMS</b>, придумайте другое название.');
	show('Вопросы и пожелания присылаем мне в ICQ : <b>5</b>З<b>O</b>-6<b>4</b>8.');
	show('Если вы хотите продолжения развития данного проекта, пожалуйста, напишите мне об этом. Ваш голос важен для нас!');
	show('<br />',false);
	show('Если вы желаете помочь проекту, вы можете перевести деньги в качестве благодарности за труды автора :');
	show('- <b style="color:#f00000">WMR : R228-526-387-290</b>');
	show('- <b style="color:#0000f0">WMZ : Z305-325-535-864</b>');
	show('- <b style="color:#00f000">WME : E283-058-070-947</b>');
	show('- <b style="color:#a0a0a0">WMU : U118-733-167-610</b>');
	show('Все средства будут направлены на развитие проекта.');

	break;
	#############################################################################
	case 'set':

	show('<h3>Настройки системы</h3>',false);
	show('<hr/>',false);

		if(isset($_GET['save']))
		{
		if(empty($_POST['admin']['login']) || empty($_POST['admin']['password']))error('<b>Не указаны важные данные</b>');

		$string = '; Настройки для скрипта SLS
;;;;;;;;;;;;;;;;;;;;;;;;;;;
[default]
; Страница, открывающаяся по дефолту, без .slsp
page='.$_POST['default']['page'].'
; Стандартная версия странциц, wml | html
version='.$_POST['default']['version'].'
; Стандартный заголовок странциц
title='.$_POST['default']['title'].'
[admin]
; Логин администратора
login='.$_POST['admin']['login'].'
; Пароль администратора
password='.$_POST['admin']['password'].'
; Разрешить выполнение PHP кода
exec_php='.$_POST['admin']['exec_php'].'
[other]
; Директория со скриптом
path='.$_POST['other']['path'].'
;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Изменено '.date('G:i:s d.m.Y');

		if(file_put_contents('system/config.ini',$string))show('<b>Настройки сохранены</b>');
		else error('Ошибка при сохранении настроек');

		$noform = 1;
		}

	if(!isset($noform))
	{
	show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=set&save&'.$rand.'&" method="post">',false);
	show('Страница, открывающаяся, если не указана другая (по запросу index.php) :');
	show('<input name="default[page]" type="text" value="'.$config['default']['page'].'">.slsp');
	show('Версия страницы, если не указан другая :');
	show('<select size="1" name="default[version]"><option value="wml"'.($config['default']['version'] == 'wml' ? ' selected' : null).'>wml</option><option value="html"'.($config['default']['version'] == 'html' ? ' selected' : null).'>html</option></select>');
	show('Заголовок страницы, если не указан другой :');
	show('<input name="default[title]" type="text" value="'.$config['default']['title'].'">');
	show('Разрешить выполнение PHP кода :');
	show('<select size="1" name="admin[exec_php]"><option value="0"'.($config['admin']['exec_php'] == '0' ? ' selected' : null).'>Нет</option><option value="1"'.($config['admin']['exec_php'] == '1' ? ' selected' : null).'>Да</option></select>');
	show('Логин администратора :');
	show('<input name="admin[login]" type="text" value="'.$config['admin']['login'].'">');
	show('Пароль администратора :');
	show('<input name="admin[password]" type="text" value="'.$config['admin']['password'].'">');
	show('Директория, где находится скрипт :');
	show('<input name="other[path]" type="text" value="'.$config['other']['path'].'">');
	show('<input type="submit" value="Сохранить">',false);
	show('</form>',false);
	}

	break;
	#############################################################################
	case 'unsess':

	show('<h3>Выход</h3>',false);
	show('<hr/>',false);

	unset($_SESSION);
	$_SESSION = array();

	session_unset();
	session_destroy();

	show('Сессия разрушена');
	show('- <a href="'.$_SERVER['SCRIPT_NAME'].'">'.basename($_SERVER['SCRIPT_NAME']).'</a>');
	show('- <a href="index.php">index.php</a>');

	break;
	#############################################################################
	case 'phpinfo':

	ob_start();
		phpinfo();
	$cnt = ob_get_contents();
	ob_end_clean();

	show(str_replace('</body>','<p id="down"><a href="#up">#ВВЕРХ</a><br />&laquo;<a href="'.$_SERVER['SCRIPT_NAME'].'">В админ-панель</a></p></body>',str_replace('<body>','<body><p id="up">&laquo;<a href="'.$_SERVER['SCRIPT_NAME'].'">В админ-панель</a><br /><a href="#down">#ВНИЗ</a></p>',str_replace('<title>phpinfo()</title>','<title>phpinfo() :: SLS</title>',$cnt))),false);

	break;
	#############################################################################
	case 'eval':

	show('<h3>Выполнение PHP кода</h3>',false);
	show('<hr/>',false);

	$def_code = 'echo \'Hello Word!\';';
	$def_textarea = $def_nl2br = $def_htmlspecialchars = $def_pre = 0;

	if(isset($_GET['yes']) && isset($_POST['code']))
		{
		$code = trim($_POST['code']);

		if(substr($code,0,5) == '<?php')$code = substr($code,5);
		elseif(substr($code,0,3) == '<?=')$code = substr($code,3);
		elseif(substr($code,0,2) == '<?')$code = substr($code,2);

		if(substr($code,-2) == '?>')$code = substr($code,0,-2);

		$def_code = $code;

		ob_start();

		$eval_mt = microtime(true);
		$eval_memory = memory_get_usage();

			eval($code);

		$eval_mt = microtime(true) - $eval_mt;
		$eval_memory = memory_get_usage() - $eval_memory;

		$cnt = ob_get_contents();
		ob_end_clean();

		if(isset($_POST['textarea']))$def_textarea = 1;
		if(isset($_POST['nl2br']))$def_nl2br = 1;
		if(isset($_POST['htmlspecialchars']))$def_htmlspecialchars = 1;
		if(isset($_POST['pre']))$def_pre = 1;

		if($def_nl2br == 1)$cnt = nl2br($cnt);
		if($def_htmlspecialchars == 1)$cnt = htmlspecialchars($cnt,ENT_QUOTES,'utf-8');

		if($def_pre == 1)show('<pre>',false);
		elseif($def_textarea == 1)show('<textarea name="result" rows="8" cols="50" wrap="off">',false);

		show($cnt,false);

		if($def_pre == 1)show('</pre>',false);
		elseif($def_textarea == 1)show('</textarea>',false);
		else show('<br />',false);

		show('<br /><small>Выполнение '.round($eval_mt,5).' сек / '.round($eval_memory / 1024,2).' кб</small>',false);

		show('<hr/>',false);

		}

	show('<form action="'.$_SERVER['SCRIPT_NAME'].'?do=eval&yes&'.$rand.'&" method="post">',false);
	show('<textarea name="code" rows="10" cols="80" wrap="off">'.$def_code.'</textarea>');
	show('<input type="submit" value="Eval"/>');
	show('<input name="textarea" type="checkbox" value="1"'.($def_textarea == 1 ? ' checked' : null).'/>textarea <input name="nl2br" type="checkbox" value="1"'.($def_nl2br == 1 ? ' checked' : null).'/>nl2br <input name="htmlspecialchars" type="checkbox" value="1"'.($def_htmlspecialchars == 1 ? ' checked' : null).'/>htmlspecialchars <input name="pre" type="checkbox" value="1"'.($def_pre == 1 ? ' checked' : null).'/>pre');
	show('</form>',false);

	break;
	}

if($mode != 'phpinfo')
	{
	if(!empty($mode))show('<hr/><a href="'.$_SERVER['SCRIPT_NAME'].'?'.$rand.'">В админку</a> | ',false);
	show('<a href="index.php">На сайт</a>');
	show('(c)Morgan, ['.round(microtime(true) - $sys['mt'],4).']');
	show('</body></html>',false);

	}

ob_end_flush();

echo $buffer;

exit;

?>