<?php
/*
Функции работы с сессией
Автор: Denvas
*/
//==================================================//
/*
Генерация новой сессии
*/
function GenSession(){
global $path_session;
do{
$ses=mt_rand(100000000,999999999)."".mt_rand(100,999);
}while(file_exists($path_session."/".$ses.".txt"));
return $ses;
};
//==================================================//
/*
Создание новой сессии
*/
function NewSession($ses,$amount=0,$ua=1){
global $path_session, $user_agent, $demo;
$ses=strtr($ses,array("."=>"","/"=>"","\\"=>"","'"=>"","\""=>""));
$nameses=$path_session."/".$ses.".txt";
if($demo)return false;
$fd=@fopen($nameses,"wb");
if($fd){
flock($fd,LOCK_EX);
fwrite($fd,time()."\n".$amount."\n".($ua?$user_agent:""));
fclose($fd);
return true;
}
return false;
};
//==================================================//
/*
Покупка продукта
*/
function ProductBuy($download,$amount){
global $path_session;
if($amount<0.1)$amount=0;//не снимать деньги, если цена ниже чем 0.1
$namebuy=$path_session."/buy.txt";
if(file_exists($namebuy)){
$buy=file($namebuy);
for($i=0;$i<count($buy);$i++)$buy[$i]=trim($buy[$i]);
}
else $buy=array(0);
$buy[0]-=$amount;
$downloadid=$download["id"]."|";
$flag=true;
for($i=1;$i<count($buy);$i++){
if(strpos($buy[$i],$downloadid)===0){
$elem=explode("|",$buy[$i]);
$elem[1]++;
$elem[2]-=$amount;
$elem[3]=$download["title"];
$buy[$i]=join("|",$elem);
$flag=false;
break;
};//if
};//for
if($flag)$buy[]=$download["id"]."|"."1|".(-$amount)."|".($download["title"]?$download["title"]:(!empty($download["file"][0])?$download["file"][0]:$download["id"]));
$fd=fopen($namebuy,"wb");
if($fd){
flock($fd,LOCK_EX);
fwrite($fd,join("\n",$buy));
fclose($fd);
};
};
//==================================================//
/*
Взять сессию, подправить количество денег и записать покупку, если таковая имеется
*/
function GetSession($ses,$amount=0,$download=array()){
global $path_session, $user_agent, $balance_day;
$data=array();
$ses=strtr($ses,array("."=>"","/"=>"","\\"=>"","'"=>"","\""=>""));
$nameses=$path_session."/".$ses.".txt";
if(file_exists($nameses)){
$save=0;
$access=file($nameses);for($i=0;$i<count($access);$i++)$access[$i]=trim($access[$i]);
if(empty($access[0]))return -1;//нет веремени регистрации или последнего доступа
//скачивание файла
if($download){
$flag=false;
for($j=3;$j<count($access);$j++){
if(strcmp($access[$j],$download["id"])==0){$flag=true;break;};
}
if($flag){
$amount=0;
}
else{
$access[]=$download["id"];
ProductBuy($download,$amount);
};
};//if($download)
//баланс
$access[1]=empty($access[1])?0:(float)$access[1];
if($amount){$access[1]+=$amount;$save=1;};
//снятие денег за пользование сайтом
$days=floor((time()-$access[0]) / (24*60*60));
if(($days>=1)&&($balance_day>0)){
$access[0]=time();
$access[1]-=$days*$balance_day;
$save=1;
};//if
//проверка на законченость денег
if($access[1]<0)return -2;//закончились деньги
//агент
if(empty($access[2])){$access[2]=$user_agent;$save=1;};
$access[2]=trim($access[2],"|");
if(strpos($access[2],$user_agent)===false){$access[2].="|".$user_agent;$save=1;};
if(substr_count($access[2],"|")>3)return -3;//3 раза сменил агента
//созранить обновления
if($save){
$fd=@fopen($nameses,"wb");
if(!$fd)return array();
flock($fd,LOCK_EX);
fwrite($fd,join("\n",$access));
fclose($fd);
};
return $access;
};//if
return -10;//нет файла
};//function
//==================================================//
?>