View file session.php

File size: 4.17Kb
<?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
//==================================================//
?>