View file functions.php

File size: 30.51Kb
<?php
########################################
#       Функции PHP, copyright by      #
#    S.P.Y. GameS (http://spygms.ru)   #
# Внимание! Некоторые функции связаны  #
#     между собой, поэтому удаление    #
#      "лишнего" не рекомендуется!     #
########################################

error_reporting(0);
set_time_limit(0);

########################################
# Функция ending
#
# Описание:
# Функция предназначена для правильного добавления окончаний к слову, в зависимости от количества.
# Внимание, функция работает далеко не со всеми словами, т.к. многие слова имеют одинаковую форму записи, но разные склонения. Также, фуекция настроена не до конца, но вы можете вручную настроить функцию, изменив параметры в переменной $words.
#
# Форма записи:
# ending($количество, $слово_в_единственном_числе);
#
# Пример использования:
# Например нам необходимо вывести на экран количество денег. В переменной $money находится их количество, например 102.
# Мы записываем:
# $money=102;
# echo "У вас ".$money." ".ending($money, "рубль");
# В итоге, на экране отобразится: "У вас 102 рубля"
########################################

function ending($int, $word){
$encoding=2;
$words=array("а"=>"*|-1#ы|-1#","е"=>"*|*|*","ё"=>"*|-1#я|-1#ёв","и"=>"*|-1#ов|-1#ов","й"=>"*|-1#ия|-1#иев","о"=>"*|*|*","у"=>"*|*|*","ы"=>"*|-1#ов|-1#ов","ь"=>"*|-1#я|-1#ей","э"=>"*|*|*","ю"=>"*|*|*","я"=>"*|-1#и|-1#ь");
$end=substr($word,-1*$encoding);
$unscle="ьй";
$output="";
$int=abs($int);
	if(!isset($words[$end])){
	$mask=array($word,$word."а",$word."ов");
	} else {
	$temp=$mask=array();
	$temp[0]=explode("|",$words[$end]);
		for($i=0; $i<count($temp[0]); $i++){
			if($temp[0][$i]=="*"){
			$mask[$i]=$word;
			} else {
			$temp[1]=explode("#",$temp[0][$i]);
				if(isset($words[substr($temp[1][1],0,$encoding)])){
					while(!eregi(substr($word,$temp[1][0]*$encoding-$encoding,$encoding),$unscle) and isset($words[substr($word,$temp[1][0]*$encoding-$encoding,$encoding)])){
					$temp[1][0]--;
					}
				}
			$mask[$i]=substr($word,0,$temp[1][0]*$encoding).$temp[1][1];
			}
		}
	}
	
	if($int<20){
		if($int==1){
		$output=$mask[0];
		} else if ($int>=2 and $int<=4){
		$output=$mask[1];
		} else {
		$output=$mask[2];
		}
	} else {
		if($int%10==1){
		$output=$mask[0];
		} else if ($int%10>=2 and $int%10<=4){
		$output=$mask[1];
		} else {
		$output=$mask[2];
		}
	}
return $output;
}

########################################
# Функция highlight
#
# Описание:
# Функция предназначена для обработки php-кода, с подсвечиванием синтаксиса. После обработки код будет выделен. Также вы можете вручную изменять цвета кода для его обработки, в переменной $colors_replace.
#
# Форма записи:
# highlight($php_код);
#
# Пример использования:
# Например нам необходимо вывести на экран содержимое файла index.php, с подсветкой синтаксиса.
# Для этого мы используем следующий код:
# $file=file("index.php");
# $file=implode("<BR>",$file);
# echo highlight($file);
########################################

function highlight($code){
	if(is_array($code)){
	$mode=1;
	$code=$code[1];
	}
$time=time()+rand(111111,999999);
$php_info=ini_get_all();
$inis=array("highlight.html","highlight.default","highlight.keyword","highlight.string","highlight.comment");
$colors=array();
	for($i=0; $i<count($inis); $i++){
	$colors[]=substr($php_info[$inis[$i]]["global_value"],1);
	}
$colors_replace=array("FFFFCC","0066FF","009900","FF0044","FFCC33","EAFFFF");
$garbage=array('>&lt;?php'.$time,"?&gt;</span>".$time,"?&gt;".$time,$time);
$garbage_replace=array(">","</span>",'','');
$code=highlight_string("<?php".$time.$code."?>".$time,true);
$code=str_replace($garbage,$garbage_replace,$code);
$code=preg_replace("!<code>(.*?)<\/code>!si","\\1",$code);
	for($i=0; $i<count($colors); $i++){
	$code=str_replace('<span style="color: #'.$colors[$i],'<font color="#'.$colors_replace[$i],$code);
	}
$code=str_replace("</span>","</font>",$code);
$output="<div style='background-color: #".$colors_replace[5]."; border: 2px solid ".ColorEdit($colors_replace[5],1.3).";'>".$code."</div>";
	if($mode){
	global $bb_code;
	$bb_code[1][$bb_code[0]]=$output;
	$bb_code[2][$bb_code[0]]=$time;
	$bb_code[0]++;
	return "[CODE:".$time."]";
	} else {
	return $output;
	}
}

########################################
# Функция extract16color
#
# Описание:
# Функция возвращает массив с параметрами r,g,b в десятичной системе счисления, извлечёнными из заданного цвета в шестнадцетиричной системе счисления. Диапазон возвращаемых параметров 0..255. Функция может быть полезна в скриптах, где используется этот диапазон, либо в других целях.
#
# Форма записи:
# extract16color($цвет_в_шестнадцетиричной_системе_счисления);
#
# Пример использования:
# Например нам необходимо получить массив параметров из синего цвета. Шестнадцетиричный код цвета #0000FF (синий) находится в переменной $blue_color.
# Для выполнения этой задачи необходимо записать:
# $blue_color="#0000FF";
# $rgb=extract16color($blue_color);
# echo "R: ".$rgb['r'].", "." G: ".$rgb['g'].", B: ".$rgb['b'];
# В итоге на экране отобразится: "R: 0, G: 0, B: 255"
########################################

function extract16color($color16){
$mask16=array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
$color_mask=array("r","g","b");
$true_color=array("r"=>0,"g"=>0,"b"=>0); 
$color16=substr($color16,1); 
	for($icm=0; $icm<count($color_mask); $icm++){
	$color16_temp=array(substr($color16,($icm*2),1),substr($color16,($icm*2)+1,1));
		for ($ic=0; $ic<2; $ic++){
			for($i=0; $i<count($mask16); $i++){
				if ($color16_temp[$ic]==$mask16[$i]){
				$color16_temp[$ic]=$i;
				break;
				}
			}
		}
	$true_color[$color_mask[$icm]]=((int)$color16_temp[0]*16)+(int)$color16_temp[1];
	}
return $true_color;
}

########################################
# Функция make16color
#
# Описание:
# Функция возвращает естнадцетиричный цветовой код полученный из переданного функции массива с параметрами r,g,b
#
# Форма записи:
# make16color($массив_с_параметрами);
#
# Пример использования:
# Например нам необходимо получить код голубого цвета из существующего массива $rgb.
# Пишем следующее:
# $rgb=array("r"=>0,"g"=>255,"b"=>255);
# echo make16color($rgb);
# В итоге на экране отобразится код: "#00FFFF"
########################################

function make16color($color10){
$mask16=array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F");
$color_mask=array("r","g","b");
$true_color="#";
	for($icm=0; $icm<count($color_mask); $icm++){
	$color10_temp=(int)$color10[$color_mask[$icm]];
	$true_color.=$mask16[(int)($color10_temp/16)];
	$true_color.=$mask16[$color10_temp%16];
	}
return $true_color;
}

########################################
# Функция ColorEdit
#
# Описание:
# Функция изменения контрастности цвета. Возвращает полученный код цвета, из переданных параметров начального цвета, и коэффициента изменения. Если коэффициент меньше числа 1, например 0.8, то возвращаемый цвет будет темнее начального. Если же коэффициент больше одного, например 1.3, то цвет соответственно станет темнее.
#
# Форма записи:
# make16color($исходный_цвет, $коэффициент изменения);
#
# Пример использования:
# Например мы создаём div-class в css стиле, с рамкой имеющей разные цвета. (для эффекта отображения).
# И у нас имеется только один, основной цвет, например #222222 (тёмный), в переменной $color. То мы записываемт такой код:
# $color="#222222";
# echo "<style> div.test  { 
# background-color: ".$color."; 
# border-bottom: 3px solid ".ColorEdit($color,0.6)."; 
# border-left: 3px solid ".ColorEdit($color,1.75)."; 
# border-top: 3px solid ".ColorEdit($color,1.75)."; 
# border-right: 3px solid ".ColorEdit($color,0.6)."; 
# }</style>";
# echo "<body bgcolor='#000000'>
# <div class='test'>
# <font color='#FFFFFF'>TECT</font>
# </div>
# </body>";
# В итоге на экране отобразится чёрный фон, на котором выделено слово тест div-классом test.
########################################

function ColorEdit($Ecolor,$percent){
$Ecolor=extract16color($Ecolor);
$color_mask=array("r","g","b");
	for($i=0; $i<count($color_mask); $i++){
	$Ecolor[$color_mask[$i]]*=$percent;
		if($Ecolor[$color_mask[$i]]<0){
		$Ecolor[$color_mask[$i]]=0;
		} else if ($Ecolor[$color_mask[$i]]>255){
		$Ecolor[$color_mask[$i]]=255;
		}
	}
return make16color($Ecolor);
}

########################################
# Функция GradientText
#
# Описание:
# Функция возвращает обработанный переданный ей текст. Обработка заключается в установке градиентного цвета на текст. Градиентный цвет начинается с передаваемого начального цвета и плавно переходящего в конечный цвет. Обработка идёт слева направо. Получается красиво =) Также в этой функции было установлено "сжатие" возвращаемой информации. Если без сжатия, при возврате текста функцией с градиентом в максимальном цветовом диапазоне, размер документа был 90 кб, то с сжатием он стал 10кб.
#
# Форма записи:
# GradientText($текст, $начальный_цвет, $конечный_цвет);
#
# Пример использования:
# Например нам необходимо отобразить на экране многоповторяющееся слово "TECT", в градиенте с диапазоном от красного цвета, до синего.
# Для этого мы записываем:
# $text=str_repeat("TECT ",10);
# echo GradientText($text,"#FF0000","#0000FF");
# В итоге на экране отображено 10-ти кратное повторение слова "TECT", в красивом переливании цвета =)
########################################

function GradientText($text,$sColor,$eColor){
$color_mask=array("r","g","b");
$color_move=array("r"=>0,"g"=>0,"b"=>0);
$color_add=array("r"=>0,"g"=>0,"b"=>0);
$word=array();
$length=strlen($text);
$output="";
$Gzip="";
$current_color="#000000";
$max=0;
	if($length>0){
	$sColor=extract16color($sColor);
	$eColor=extract16color($eColor);
	$cColor=$sColor;
		for($i=0; $i<count($color_mask); $i++){
		$temp=$sColor[$color_mask[$i]]-$eColor[$color_mask[$i]];
		$color_add[$color_mask[$i]]=abs($temp);
			if(abs($temp)>$max){
			$max=abs($temp);
			}
			if($temp<0){
			$color_move[$color_mask[$i]]=1;
			} else if ($temp>0){
			$color_move[$color_mask[$i]]=-1;
			} else {
			$color_move[$color_mask[$i]]=0;
			}
		}
		for($i=0; $i<$length; $i++){
		$char=substr($text,$i,1);
		$test=ord($char);
			if($test>=128 and $test<=255 | $test=""){
			$char=substr($text,$i,2);
			$i++;
			}
		$word[]=$char;
		}
	}
$length=count($word);
$koeff_add=@(($max/$length)/$max)*100;
	for($i=0; $i<$length; $i++){
		for($i2=0; $i2<count($color_mask); $i2++){
		$add=(($color_add[$color_mask[$i2]]/100)*$koeff_add)*$color_move[$color_mask[$i2]];
		$cColor[$color_mask[$i2]]+=$add;
		}
	$current_color=make16color($cColor);
		if(!$i){
		$output.='<font color="'.$current_color.'">'.$word[$i];
		$Gzip=$current_color;
		} else {
			if($current_color==$Gzip | $word[$i]==" "){
			$output.=$word[$i];
			} else {
			$output.='</font><font color="'.$current_color.'">'.$word[$i];
			$Gzip=$current_color;
			}
		}
	}
	if(strlen($output)){
	$output.="</font>";
	}
return $output;
}

########################################
# Функция DeleteDIR
#
# Описание:
# Функция удаляет указанную директорию.
#
# Форма записи:
# DeleteDIR($путь_к_директории);
#
# Пример использования:
# Например нам необходимо удалить папку data/saves, со всем её содержимым.
# Для этого, мы записываем:
# DeleteDIR("data/saves");
# В результате папка будет удалена...
########################################

function DeleteDIR($directory){
$dir = opendir($directory);
	while($file = readdir($dir)){
		if(is_dir($directory.'/'.$file)){
			if($file != "." && $file != ".."){
			DeleteDIR($directory.'/'.$file);
			}
		} else if(is_file($directory.'/'.$file)){
		unlink($directory.'/'.$file);
		}
	}	
closedir($dir);
rmdir($directory);
}

########################################
# Функция BytesSize
#
# Описание:
# Функция возвращает сокращённое количество байт до ближайшей велечины.
#
# Форма записи:
# BytesSize($количество_байт);
#
# Пример использования:
# Например нам необходимо определить и вывести на экран размер файла programs/exe/test.exe, предположим что размер этого файла 82376487 байт.
# Скрипт выполнения:
# $size=filesize("programs/exe/test.exe"); 
# echo "Размер файла test.exe: ".BytesSize($size);
# В результате на экране отобразится тескт: "Размер файла test.exe: 78.56 Мб."
########################################

function BytesSize($size){
	if ($size<1024){
	$output=$size." б.";
	} else if ($size<1048576){			
	$output=round(($size/1024),2)." Кб.";
	} else if ($size<1073741824) {
	$output=round((($size/1024)/1024),2)." Мб.";
	} else if ($size<1099511627776) {
	$output=round(((($size/1024)/1024)/1024),2)." Гб.";
	} else {
	$output=round((((($size/1024)/1024)/1024)/1024),2)." Тб.";
	}
return $output;
}

########################################
# Функция BBcode
#
# Описание:
# Функция возвращает текст обработанный на специальные теги.
#
# Форма записи:
# BBcode($текст);
#
# Пример использования:
# Функция "умеет" обрабатывать такие теги как:
# http://ссылка - выделение ссылок;
# [B]текст[/B] - выделение внутритегового текста жирным шрифтом;
# [U]текст[/U] - подчёркивание внутритегового текста;
# [I]текст[/I] - выделение внутритегового текста курсивом;
# [color=$code]текст[/color] - выделение внутритегового текста выбранным цветом. Где $code - выбранный цвет, в шестнадцетиричной системе счисления;
# [code]текст[/code] - обработка внутритегового текста на подсветку синтаксиса;
########################################

function BBcode($text){
global $bb_code;
$bb_code=array(0,array(),array());
$text=preg_replace_callback("!\[code\](.*?)\[\/code\]!si",'highlight',$text);
$text=htmlspecialchars($text);
$text=eregi_replace('(https?|ftp)://[^ а-я]*',"<a href='\\0'>\\0</a>",$text);
$text=preg_replace("!\[B\](.*?)\[\/B\]!si","<B>\\1</B>",$text);
$text=preg_replace("!\[U\](.*?)\[\/U\]!si","<U>\\1</U>",$text);
$text=preg_replace("!\[I\](.*?)\[\/I\]!si","<I>\\1</I>",$text);
$text=preg_replace('!\[color\=\#?([A-Fa-f0-9]{6})\](.*?)\[/color\]!si','<font color="\1">\2</font>',$text);
	for($i=0; $i<$bb_code[0]; $i++){
	$text=str_replace("[CODE:".$bb_code[2][$i]."]",$bb_code[1][$i],$text);
	}
return $text;
}

########################################
# Функция AccessTo
#
# Описание:
# Функция вызова авторизационного меню. Для установки группы людей, которые смогут авторизовыватся, нужно их записывать в переменную $data, через запятую, следующим способом: "логин"=>"пароль в тройном md5". Для получения пароля в тройном md5 нужно написать: echo md5(md5(md5("пароль"))); - результат отобразится на экране.
#
# Форма записи:
# AccessTo();
#
# Пример использования:
# Например нам необходимо разрешить доступ к определённым скриптам только выделенным лицам. Для этого нужно вызвать функцию в том месте скрипта, где необходима авторизация.
# Вызов функции:
# AccessTo();
# В итоге появится авторизационное окно, в котором необходимо вводить верные данные для получения последующего доступа.
########################################

function AccessTo(){
$data=array("user1"=>"pass in 3-x md5","user2"=>"pass in 3-x md5","user3"=>"pass in 3-x md5");
	if($data[$_SERVER['PHP_AUTH_USER']]!=md5(md5(md5($_SERVER['PHP_AUTH_PW'])))){
	header('WWW-Authenticate: Basic realm="Access Denied!!!"');
	exit;
	}
}

########################################
# Функция hard_encode
#
# Описание:
# Функция шифрования текста по ключу. Параметр ключа обязателен. 
# Внимание! Функция не была протестена до конца, поэтому при выборе ключа, убедитесь что расшифровка с этим ключом будет действительна!
#
# Форма записи:
# hard_encode($текст, $ключ);
#
# Пример использования:
# Например нам необходимо зашифровать слово "TECT", по ключу "1234".
# Код:
# $key="1234";
# $word="TECT";
# echo hard_encode($word, $key);
# Результат: "96Ma6A17dC1c2E"
########################################

function hard_encode($text,$key){
$length=strlen($text);
$output="";
$collision=array(2,4);
	for($i=0; $i<strlen($key); $i++){
	$collision[0]+=ord($key[$i]);
	$collision[1]+=ord($key[$i]);
	}
$collision[0]=($collision[0]%27)+10;
$collision[1]=(int)($collision[1]/strlen($key));
$collision[1]=($collision[1]%32)+3;
($collision[0]==$collision[1]) ? $collision[1]-- : $collision[0];
$separator=chr(65+(int)($collision[0]/2));
	for($i=0; $i<$length; $i++){
	$mod_collision=$i*$collision[1];
	$output.=base_convert(ord($text[$i])+$mod_collision,$collision[0],$collision[1]).$separator;
	$separator=chr(65+$mod_collision%20);
	}
return $output;
}

########################################
# Функция hard_decode
#
# Описание:
# Функция расшифровки зашифрованного ранее текста по ключу. Параметр ключа обязателен.
# Внимание! Функция не была протестена до конца, поэтому при выборе ключа, убедитесь что расшифровка с этим ключом будет действительна!
#
# Форма записи:
# hard_decode($текст, $ключ);
#
# Пример использования:
# Например нам необходимо расшифровать слово, имея только зашифрованный формат и ключ.
# Код:
# $key="1234";
# $word="96Ma6A17dC1c2E";
# echo hard_decode($word, $key);
# Результат: "TECT"
########################################

function hard_decode($text,$key){
$length=strlen($text);
$output="";
$collision=array(2,4);
	for($i=0; $i<strlen($key); $i++){
	$collision[0]+=ord($key[$i]);
	$collision[1]+=ord($key[$i]);
	}
$collision[0]=($collision[0]%27)+10;
$collision[1]=(int)($collision[1]/strlen($key));
$collision[1]=($collision[1]%32)+3;
($collision[0]==$collision[1]) ? $collision[1]-- : $collision[0];
$separator=chr(65+(int)($collision[0]/2));
$rec="";
$symbols=0;
	for($i=0; $i<$length; $i++){
		if($text[$i]!=$separator){
		$rec.=$text[$i];
		} else {	
		$mod_collision=$symbols*$collision[1];
		$output.=chr(base_convert($rec,$collision[1],$collision[0])-$mod_collision);
		$separator=chr(65+$mod_collision%20);
		$rec="";
		$symbols++;
		}
	}
return $output;
}

########################################
# Функция FileSQL
#
# Описание:
# Функция предназначена для удобной работы с файловыми базами данных.
# Для установки пути к базе данных, необходимо прописать этот путь (например ../my/new_db.dat) в переменной $db_path. Если в пути используются несуществующие каталоги, то они создадутся автоматически.
#
# Форма записи:
# FileSQL($команда, $ID, $данные));
#
# Пример использования:
# Допустим нам необходимо сохранить данные: логин - Ваня и его Пароль - 1234;
# Вот пример кода для выполнения данной операции:
#
# $login="Ваня";
# $pass="1234";
# FileSQL("COUNT: ADD", "", $login."|".$pass);
# B итоге мы сохранили на последнюю строку базы данных текст "Ваня|1234";
# Для последующего получения этих данных, необходимо написать $data=FileSQL("COUNT: GET", "ID_нужной_строки");
# Итог - в переменной $data находятся данные строки с введённым вами ID.
#
# Все доступные команды FileSQL:
# --- Запросы DB ---{
# "DB: SIZE" - возвращает размер базы данных в байтах;
# "DB: SIZE_BS" - возвращает сокращённый размер базы данных;
# "DB: CLEAR" - очистка базы данных;
# "DB: DELETE" - удаление базы данных;
# --- Запросы DB ---}
#
# --- Запросы COUNT ---{
# Внимание, строки считаются с 0. Т.е. ID первой строки равен нулю, второй - единице, и т.д.
#
# "COUNT: PASTE", "ID", "TEXT" - вставка строки в базу данных, где ID - это номер строки, а TEXT - это сохраняемый текст. Вставка строки переносит предыдущие строки с и после запрошенного ID, на строку ниже. Параметром TEXT может быть переменная типа array, string, integer или boolean. Внимание, после сохранения переменной, при последующем запросе этой строки будет возвращена переменная этого же типа;
# "COUNT: ADD", "TEXT" - та же самая функция что и "COUNT: PASTE", только строка добавляется в конце списка, а не произвольно;
# "COUNT: REPLACE", "ID", "TEXT" - та же самая функция что и "COUNT: PASTE", только вместо переноса предыдущих строк на строчку ниже, выполняется замена предыдущей строки с запрошенным ID на текущую;
# "COUNT: JOIN", "ID", "TEXT" - функция добавления текста параметра TEXT, к уже существующему тексту в строке с параметром ID;
# "COUNT: GET", "ID" - возвращает данные строки с указанным ID, причём данные возвращаются в виде переменной того типа, в котором их сохранили в эту строку;
# "COUNT: DEL", "ID" - удаление строки, где ID - это номер строки;
# "COUNT: SIZE" - возвращает общее количество строк базы данных;
# --- Запросы COUNT ---}
# Все запросы исполняются так: 
# FileSQL(запрос);
########################################

function FileSQL($method, $ID, $data){
	function SaveFile($file,$data,$flag,$ch){
	$fp=fopen($file, $flag);
	flock($fp,LOCK_EX);
	fputs($fp,$data);
	fflush($fp);
	flock($fp,LOCK_UN);
	fclose($fp);
		if($ch){
		chmod($file,0777);
		}
	}
	function FatalError($error){
	$errors=array("Неверный запрос!","Указана несуществующая команда!","Объединение двух разных типов данных!");
	echo "<BR><font color='#FF0000'> FileSQL error: ".$errors[$error]."</font><BR>";
	}
$db_path="my_db.dat";

$commands=array("DB"=>array("SIZE","SIZE_BS","CLEAR","DELETE"),"COUNT"=>array("ADD","DEL","SIZE","PASTE","REPLACE","GET","JOIN"));
$method=strtoupper(chop($method));
$exp="";
	if(ereg(": ",$method)){
	$exp=": ";
	} else if (ereg(":",$method)){
	$exp=":";
	} else {
	FatalError(0);
	return 0;
	}
$command=explode($exp,$method);
	if(!file_exists($db_path)){
	$path=explode("/",$db_path);
		for($i=0; $i<count($path)-1; $i++){
		$real_path=array($path[0]);
			for($temp=1; $temp<$i+1; $temp++){
			$real_path[$temp]=$path[$temp];
			}
		$real_path=implode("/",$real_path);
			if($path[$i]!="." and $path[$i]!=".." and !is_dir($real_path)){
			mkdir($real_path,0777);
			chmod($real_path,0777);
			}
		}
	SaveFile($db_path,"","w",1);
	}
$db=file($db_path);
	if(!array_search($command[1],$commands[$command[0]]) and $command[1]!=$commands[$command[0]][0]){
	FatalError(1);
	return 0;
	}
	if($command[0]=="DB"){
		if($command[1]=="SIZE"){
		return filesize($db_path);
		} else if($command[1]=="SIZE_BS"){
		return BytesSize(filesize($db_path));
		} else if($command[1]=="CLEAR"){
		SaveFile($db_path,"","w");
		(!filesize($db_path)) ? $r=1 : $r=0;
		return $r;
		} else if($command[1]=="DELETE"){
		unlink($db_path);
		(!file_exists($db_path)) ? $r=1 : $r=0;
		return $r;
		}
	} else if ($command[0]=="COUNT"){
		if ($command[1]=="JOIN"){
		$ID=(int)$ID;
		$db[$ID]=unserialize($db[$ID]);
			if(is_array($db[$ID])){
				if(!is_array($data)){
				FatalError(2);
				return 0;
				}
			$temp=count($db[$ID]);
			$db[$ID]=serialize(array_merge($db[$ID],$data))."\r\n";
			} else {
				if(is_array($data)){
				FatalError(2);
				return 0;
				}
			$temp=strlen($db[$ID]);
			$db[$ID]=serialize($db[$ID].$data)."\r\n";
			
			}
		SaveFile($db_path,implode("",$db),"w");
		$db=file($db_path);
		(is_array($data)) ? ((count(unserialize($db[$ID]))>$temp) ? $r=1 : $r=0) : ((strlen(unserialize($db[$ID]))>$temp) ? $r=1 : $r=0);
		return $r;
		} else if($command[1]=="GET"){
		$ID=(int)$ID;
			if(!isset($db[$ID]) | $ID<0){
			return 0;
			}	
		return unserialize($db[$ID]);
		} else if($command[1]=="ADD"){
		$temp=count($db);
			if(!isset($ID)){
			return 0;
			}
		SaveFile($db_path,serialize($ID)."\r\n","a+");
		$db=file($db_path);
		(count($db)==$temp+1) ? $r=1 : $r=0;
		return $r;
		} else if($command[1]=="REPLACE"){
		$ID=(int)$ID;
			if(!isset($data) | $ID<0){
			return 0;
			}	
		$db[$ID]=serialize($data)."\r\n";
		SaveFile($db_path,implode("",$db),"w");
		return 1;
		} else if($command[1]=="PASTE"){
		$temp=count($db);
		$ID=(int)$ID;
			if(!isset($data) | $ID<0){
			return 0;
			}	
			$z=$ID;
			while(!isset($db[$z-1]) and $z>0){
			$db[$z-1]="\r\n";
			$z--;
			}
			if(!isset($db[$ID])){
			$db[$ID]=serialize($data)."\r\n";
			} else {
			$db[$ID]=serialize($data)."\r\n".$db[$ID];
			}
		SaveFile($db_path,implode("",$db),"w");
		$db=file($db_path);
		($ID>$temp) ? ((count($db)==$ID+1) ? $r=1 : $r=0) : ((count($db)==$temp+1) ? $r=1 : $r=0);
		return $r;
		} else if ($command[1]=="DEL"){
		$temp=count($db);
		$ID=(int)$ID;
			if(!isset($db[$ID])){
			return 0;
			}
		$db[$ID]="";
		SaveFile($db_path,implode("",$db),"w");
		$db=file($db_path);
		(count($db)==$temp-1) ? $r=1 : $r=0;
		return $r;
		} else if($command[1]=="SIZE"){
		return count($db);
		}
	}
}
?>