Вход Регистрация
Файл: dcms 6.7.5/sys/inc/fnc.php
Строк: 380
<?


function url($url)
{
$url2=explode('/'$url);
for (
$i=0;$i<sizeof($url2);$i++)
{
$url2[$i]=urlencode($url2[$i]);
}
return 
implode('/',$url2);
}

// ограничение времени выполнения скрипта
function time_limit($time){if (DCMS_SET_TIME_LIMIT && @set_time_limit($time))return true;else false;}

// псевдонимы функций
function my_esc($str){return mysql_real_escape_string($str);}

// для php 4 (альтернатива file_put_contents)
if (!function_exists('file_put_contents')){
function 
file_put_contents($file,$data){
$f=@fopen($file'w');
return @
fwrite($f$data);
@
fclose($f);}}

// Защита от частых запросов с одного IP
if ($set['antidos']){
$antidos[]=array('time'=>$time);$k_loads=0;
if (
is_file(H.'sys/tmp/antidos_'.$iplong.'.dat')){
$antidos_dat=unserialize(file_get_contents(H.'sys/tmp/antidos_'.$iplong.'.dat'));
for (
$i=0;$i<150 && $i<sizeof($antidos_dat);$i++)
{
if(
$antidos_dat[$i]['time']>$time-5)
{
$k_loads++;
$antidos[]=$antidos_dat[$i];
}
}
}
if (
$k_loads>100)
{
if (
mysql_result(mysql_query("SELECT COUNT(*) FROM `ban_ip` WHERE `min` <= '$iplong' AND `max` >= '$iplong'"), 0)==0)
mysql_query("INSERT INTO `ban_ip` (`min`, `max`, `prich`) values('$iplong', '$iplong', 'AntiDos')",$db);
}
@
file_put_contents(H.'sys/tmp/antidos_'.$iplong.'.dat'serialize($antidos));
@
chmod(H.'sys/tmp/antidos_'.$iplong.'.dat'0777);
}


// список рекламы
function get_rekl()
{
global 
$set;
$rekl=array();

// динамическая реклама от wappc.biz
if ($set['wappc_num_links'])
{
$wappc_rekl=&$rekl[101];
global 
$wappc3_curl$wappc3_pwdtech;
$wappc3_curl=DCMS_CURL;$wappc3_pwdtech=$set['wappc_pwdtech'];
include_once 
H.'sys/inc/libwappc3.php';
$wappc_rekl=explode('%split%',GetFeedWAPPC3($set['wappc_num_links'],array('charset'=>'utf-8','temp'=>H.'sys/tmp','aff'=>$set['wappc_id'],'empty'=>"<a".(IS_WEB?" target='_blank'":null)." href='http://masteram.us/?uid=5408'>форум wap мастеров</a>",'template'=>'%code%','sep'=>'%split%','topbid'=>1)));
}


$q=mysql_query("SELECT * FROM `rekl` WHERE `time_last` > '".time()."' ORDER BY id ASC");
while (
$post mysql_fetch_assoc($q))
{
$arr_rekl=&$rekl[$post['sel']][];
$arr_rekl['link']=$post['dop_str']?"http://$_SERVER[SERVER_NAME]/go.php?rekl_id=$post[id]":$post['link'];
$arr_rekl['img']=$post['img'];
$arr_rekl['name']=$post['name'];
}
return 
$rekl;
}



function 
avatar_path($id_user)
{
$ava=@glob(H.'sys/avatar/'.$id_user.'.*');
if (
$ava)return str_replace(H,'/',$ava[0]);
else return 
false;
}


// загрузка списка тем
function themes_list($browser=false)
{
global 
$set;
$themes=array();
$dir_h=opendir(H.'style/themes');
while (
$dir_r=readdir($dir_h)){
if (
$dir_r=='.' || $dir_r=='..')continue;
if (!
$ini=@parse_ini_file(H.'style/themes/'.$dir_r.'/config.ini'))continue;

// только для wap или web
if ($browser && isset($ini['only_for']) && $browser!=$ini['only_for'])continue;

// откидываем тему, если не совпадает версия движка
if (isset($ini['ver'])){
$no_use=true;
foreach (
$ini['ver'] as $value) {
if (
preg_match('#^'.str_replace('x''[0-9]+'preg_quote($value)).'$#'$set['dcms_version']))$no_use=false;}
if (
$no_use)continue;}



$ini['dir']=$dir_r// папка с темой
$themes[]=$ini;
}
closedir($dir_h);
return 
$themes;
}


// бан по IP
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `ban_ip` WHERE `min` <= '$iplong' AND `max` >= '$iplong'"), 0)!=0){
if (!isset(
$ban_ip_page)){header("Location: /ban_ip.php");exit;}}
if (isset(
$ip2['cl']) && mysql_result(mysql_query("SELECT COUNT(*) FROM `ban_ip` WHERE `min` <= '".ip2long($ip2['cl'])."' AND `max` >= '".ip2long($ip2['cl'])."'"), 0)!=0){
if (!isset(
$ban_ip_page)){header("Location: /ban_ip.php");exit;}}
if (isset(
$ip2['xff']) && mysql_result(mysql_query("SELECT COUNT(*) FROM `ban_ip` WHERE `min` <= '".ip2long($ip2['xff'])."' AND `max` >= '".ip2long($ip2['xff'])."'"), 0)!=0){
if (!isset(
$ban_ip_page)){header("Location: /ban_ip.php");exit;}}


// антимат сделает автоматическое предупреждение, а затем бан
function antimat($str)
{
global 
$user,$time,$set;
if (
$set['antimat'])
{
$antimat=&$_SESSION['antimat'];
include_once 
H.'sys/inc/censure.php';
$censure=censure($str);
if (
$censure)
{
$antimat[$censure]=$time;
if (
count($antimat)>&& isset($user) && $user['level']) // если сделано больше 3-х предупреждений
{
$prich="Обнаружен мат: $censure";
$timeban=$time+60*60// бан на час
mysql_query("INSERT INTO `ban` (`id_user`, `id_ban`, `prich`, `time`) VALUES ('$user[id]', '0', '$prich', '$timeban')");
admin_log('Пользователи','Бан',"Бан пользователя '[url=/amd_panel/ban.php?id=$user[id]]$user[nick][/url]' (id#$user[id]) до ".vremja($timeban)." по причине '$prich'");
header('Location: /ban.php?'.SID);exit;
}
return 
$censure;
}
else return 
false;
}
else return 
false;
}

// рекурсивное удаление папки
function delete_dir($dir){
if (
is_dir($dir)){$od=opendir($dir);
while (
$rd=readdir($od)){
if (
$rd == '.' || $rd == '..') continue;
if (
is_dir("$dir/$rd")){
@
chmod("$dir/$rd"0777);
delete_dir("$dir/$rd");}
else{
@
chmod("$dir/$rd"0777);
@
unlink("$dir/$rd");}}
closedir($od);
@
chmod("$dir"0777);
return @
rmdir("$dir");}
else{
@
chmod("$dir"0777);
@
unlink("$dir");}}


// очистка временной папки
if (!isset($hard_process))
{
$q=mysql_query("SELECT * FROM `cron` WHERE `id` = 'clear_tmp_dir'");
if (
mysql_num_rows($q)==0)mysql_query("INSERT INTO `cron` (`id`, `time`) VALUES ('clear_tmp_dir', '$time')");
$clear_dir mysql_fetch_assoc($q);
if (
$clear_dir['time']==NULL || $clear_dir['time']<$time-60*60*24){
$hard_process=true;
mysql_query("UPDATE `cron` SET `time` = '$time' WHERE `id` = 'clear_tmp_dir'");

$tmp_dir=glob(H.'sys/tmp/*');
if (
$tmp_dir){
foreach (
$tmp_dir as $tmp_path) {
if (
filemtime($tmp_path))delete_dir($tmp_path);
}
}

}
}


// Подведение итогов статистики
if (!isset($hard_process)){
$q=mysql_query("SELECT * FROM `cron` WHERE `id` = 'visit' LIMIT 1");
if (
mysql_num_rows($q)==0)mysql_query("INSERT INTO `cron` (`id`, `time`) VALUES ('visit', '$time')");
$visit mysql_fetch_assoc($q);
if (
$visit['time']==NULL || $visit['time']<time()-60*60*23){
time_limit(600);// Ставим ограничение на 10 минут
$last_day=mktime(000date('m'), date('d')-1); // начало вчерашних суток
$today_time=mktime(000); // начало сегодняшних суток
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `visit_everyday` WHERE `time` = '$last_day'"),0)==0){
mysql_query("UPDATE `cron` SET `time` = '$time' WHERE `id` = 'visit'");
$hard_process=true;
// записываем общие данные за вчерашние сутки в отдельную таблицу
mysql_query("INSERT INTO `visit_everyday` (`host` , `host_ip_ua`, `hit`, `time`) VALUES ((SELECT COUNT(DISTINCT `ip`) FROM `visit_today` WHERE `time` < '$today_time'),(SELECT COUNT(DISTINCT `ip`, `ua`) FROM `visit_today` WHERE `time` < '$today_time'),(SELECT COUNT(*) FROM `visit_today` WHERE `time` < '$today_time'),'$last_day')");
mysql_query('DELETE FROM `visit_today` WHERE `time` < '.$today_time);}}}







// запись о переходах на сайт
if (isset($_SERVER['HTTP_REFERER']) && !preg_match('#'.preg_quote($_SERVER['HTTP_HOST']).'#'$_SERVER['HTTP_REFERER']) && $ref=@parse_url($_SERVER['HTTP_REFERER'])){
if (isset(
$ref['host']))$_SESSION['http_referer']=$ref['host'];}




function 
br($msg,$br='<br />'){return preg_replace("#((<br( ?/?)>)|n|r)+#i",$br$msg);} // переносы строк

function esc($text,$br=NULL){ // Вырезает все нечитаемые символы
if ($br!=NULL)
for (
$i=0;$i<=31;$i++)$text=str_replace(chr($i), NULL$text);
else{
for (
$i=0;$i<10;$i++)$text=str_replace(chr($i), NULL$text);
for (
$i=11;$i<20;$i++)$text=str_replace(chr($i), NULL$text);
for (
$i=21;$i<=31;$i++)$text=str_replace(chr($i), NULL$text);}
return 
$text;}





// получаем данные пользователя и уровень прав (+ кеширование)
function get_user($user_id=0)
{
if (
$user_id==0)
{
// бот
$ank2['id']=0;
$ank2['nick']='[$Y$TEM]';
$ank2['level']=999;
$ank2['pol']=1;
$ank2['group_name']='Системный робот';
$ank2['ank_o_sebe']='Создан для уведомлений';


return 
$ank2;
}
else
{
static 
$users// переменная не удаляется после вызова функции
$user_id=intval($user_id);
$users[0]=false;
if (!isset(
$users[$user_id])){
if (
mysql_result(mysql_query("SELECT COUNT(*) FROM `user` WHERE `id` = '$user_id'"),0)==1)
{
$users[$user_id]=mysql_fetch_assoc(mysql_query("SELECT * FROM `user` WHERE `id` = '$user_id' LIMIT 1"));
$tmp_us=mysql_fetch_assoc(mysql_query("SELECT `level`,`name` AS `group_name` FROM `user_group` WHERE `id` = '".$users[$user_id]['group_access']."' LIMIT 1"));

if (
$tmp_us['group_name']==null) {
$users[$user_id]['level']=0;
$users[$user_id]['group_name']='Пользователь';
}
else
{
$users[$user_id]['level']=$tmp_us['level'];
$users[$user_id]['group_name']=$tmp_us['group_name'];
}
}
else 
$users[$user_id]=false;
}
return 
$users[$user_id];
}
}



//ANTIHACK ХУЛИГАН
$cuseragent $_SERVER['HTTP_USER_AGENT'];
$ip $_SERVER['HTTP_X_FORWARDED_FOR'];
$refferer $_SERVER['HTTP_REFERER'];
$refferer=htmlspecialchars($refferer); 
$cuseragent=htmlspecialchars($cuseragent); 
$gde=$_SERVER['SCRIPT_NAME'];


if(
$refferer=='')
{
$refferer='NONE';
}

if(!
defined("ADMIN"))
{

$hackparam =$_SERVER['QUERY_STRING'];
$hackparam=htmlspecialchars($hackparam); 

$hackcmd = array('<sсriрt>''%3CSCRIPT%3E''</sсriрt>''%3Csсriрt%3E''%3C/sсriрt%3E''+document.cookie''alert()''">''%22''%27''<sсriрt 1>''%3Cscript%201%3E''javasсriрt:''%60''%3Cs%D1%81ri%D1%80t%3E''UNION''union''cmd=');

$checkcmd str_replace($hackcmd'X'$hackparam);

if (
$hackparam != $checkcmd)
{
$sqlsession $db;

{

mysql_query("INSERT INTO ban_ip (min, max) VALUES("$iplong", "$iplong");",$sqlsession); 
$q=mysql_query("SELECT * FROM `user`  WHERE `ip` = '$iplong'");
while (
$kto mysql_fetch_array($q))
{
if (
$hackparam != '0'){
mysql_query("INSERT INTO mail (id_user, id_kont, msg, time) VALUES("0", "1", "Попытка взлома с IP$iplong и SOFT$cuseragent .
Атакуемый файл$gde.Ник хакера:$kto[nick],ему дан бан по IP.", "$time");",$sqlsession); 
}else{
mysql_query("INSERT INTO mail (id_user, id_kont, msg, time) VALUES("0", "1", "Попытка взлома с IP$iplong и SOFT$cuseragent .
Атакуемый файл$gde.Хакер в режиме гостя,ему дан бан по IP.", "$time");",$sqlsession); 
}
mysql_close();
}

}
die( 
"<h2>Облом,атака сорвана!</h2><br>Ваш браузер: <b>$cuseragent</b><br>Ваш IP: <b>$iplong</b><br><b>Ваши данные отправленны в милицию,ждите повестку с суд!</b><br><br>Иди отдыхай,ламер!!!!" );

}
}
//
// определение оператора
function opsos($ips=NULL){
global 
$ip;
if (
$ips==NULL)$ips=$ip;
$ipl=ip2long($ips);
if (
mysql_result(mysql_query("SELECT COUNT(*) FROM `opsos` WHERE `min` <= '$ipl' AND `max` >= '$ipl'"), 0)!=0){
$opsos=mysql_fetch_assoc(mysql_query("SELECT opsos FROM `opsos` WHERE `min` <= '$ipl' AND `max` >= '$ipl' LIMIT 1"));
return 
stripcslashes(htmlspecialchars($opsos['opsos']));}
else return 
false;}





// вывод времени
function vremja($time=NULL)
{
global 
$user;
if (
$time==NULL)$time=time();
if (isset(
$user))$time=$time+$user['set_timesdvig']*60*60;
$timep="".date("j M Y в H:i"$time)."";
$time_p[0]=date("j n Y"$time);
$time_p[1]=date("H:i"$time);
if (
$time_p[0]==date("j n Y"))$timep=date("H:i:s"$time);
if (isset(
$user)){
if (
$time_p[0]==date("j n Y"time()+$user['set_timesdvig']*60*60))$timep=date("H:i:s"$time);
if (
$time_p[0]==date("j n Y"time()-60*60*(24-$user['set_timesdvig'])))$timep="Вчера в $time_p[1]";}
else{
if (
$time_p[0]==date("j n Y"))$timep=date("H:i:s"$time);
if (
$time_p[0]==date("j n Y"time()-60*60*24))$timep="Вчера в $time_p[1]";}
$timep=str_replace("Jan","Янв",$timep);
$timep=str_replace("Feb","Фев",$timep);
$timep=str_replace("Mar","Марта",$timep);
$timep=str_replace("May","Мая",$timep);
$timep=str_replace("Apr","Апр",$timep);
$timep=str_replace("Jun","Июня",$timep);
$timep=str_replace("Jul","Июля",$timep);
$timep=str_replace("Aug","Авг",$timep);
$timep=str_replace("Sep","Сент",$timep);
$timep=str_replace("Oct","Окт",$timep);
$timep=str_replace("Nov","Ноября",$timep);
$timep=str_replace("Dec","Дек",$timep);
return 
$timep;
}




// только для зарегистрированых
function only_reg($link NULL) {
global 
$user;
if (!isset(
$user))
{
if (
$link==NULL)$link='/index.php?'.SID;
header("Location: $link");exit;}}
// только для незарегистрированых
function only_unreg($link NULL) {
global 
$user;
if (isset(
$user)){
if (
$link==NULL)$link='/index.php?'.SID;
header("Location: $link");exit;}}
// только для тех, у кого уровень доступа больше или равен $level
function only_level($level=0,$link NULL) {
global 
$user;
if (!isset(
$user) || $user['level']<$level){
if (
$link==NULL)$link='/index.php?'.SID;
header("Location: $link");exit;}}





if (!isset(
$hard_process)){
$q=mysql_query("SELECT * FROM `cron` WHERE `id` = 'everyday'");
if (
mysql_num_rows($q)==0)mysql_query("INSERT INTO `cron` (`id`, `time`) VALUES ('everyday', '".time()."')");
$everyday mysql_fetch_assoc($q);
if (
$everyday['time']==NULL || $everyday['time']<time()-60*60*24){
$hard_process=true;
time_limit(600);// Ставим ограничение на 10 минут
mysql_query("UPDATE `cron` SET `time` = '".time()."' WHERE `id` = 'everyday'");
mysql_query("DELETE FROM `guests` WHERE `date_last` < '".(time()-600)."'");
mysql_query("DELETE FROM `chat_post` WHERE `time` < '".(time()-60*60*24)."'"); // удаление старых постов в чате
mysql_query("DELETE FROM `user` WHERE `activation` != null AND `time_reg` < '".(time()-60*60*24)."'"); // удаление неактивированных аккаунтов

// удаляем все контакты, помеченные на удаление более месяца назад
$qd=mysql_query("SELECT * FROM `users_konts` WHERE `type` = 'deleted' AND `time` < ".($time-60*60*24*30));
while (
$deleted=mysql_fetch_array($qd)) {
mysql_query("DELETE FROM `users_konts` WHERE `id_user` = '$deleted[id_user]' AND `id_kont` = '$deleted[id_kont]'");

if (
mysql_result(mysql_query("SELECT COUNT(*) FROM `users_konts` WHERE `id_kont` = '$deleted[id_user]' AND `id_user` = '$deleted[id_kont]'"),0)==0)
{
// если юзер не находится в контакте у другого, то удаляем и все сообщения
mysql_query("DELETE FROM `mail` WHERE `id_user` = '$deleted[id_user]' AND `id_kont` = '$deleted[id_kont]' OR `id_kont` = '$deleted[id_user]' AND `id_user` = '$deleted[id_kont]'");
}
}



$tab=mysql_query('SHOW TABLES FROM '.$set['mysql_db_name']);
for(
$i=0;$i<mysql_num_rows($tab);$i++)
{
mysql_query("OPTIMIZE TABLE `".mysql_tablename($tab,$i)."`"); // оптимизация таблиц
}
}
}



// вывод ошибок
function err()
{
global 
$err;
if (!isset(
$err))return false;
if (
is_string($err))$err=(array)$err;
if (!
$err)return false;
$smarty = new Smarty_conf();
$smarty->assign('errors',$err);
$smarty->display('info.err.tpl');
}


function 
msg($msg){
if (!isset(
$msg))return false;
if (
is_string($msg))$msg=(array)$msg;
if (!
$msg)return false;
$smarty = new Smarty_conf();
$smarty->assign('messages',$msg);
$smarty->display('info.msg.tpl');


//echo "<div class='msg'>$msg</div>n";
// вывод сообщений


// отправка запланированных писем
$q=mysql_query("SELECT * FROM `mail_to_send` LIMIT 1");
if (
mysql_num_rows($q)!=0){
$mail mysql_fetch_assoc($q);
$adds="From: "admin@$_SERVER[HTTP_HOST]" <admin@$_SERVER[HTTP_HOST]>n";
$adds .= "Content-Type: text/html; charset=utf-8n";
mail($mail['mail'],'=?utf-8?B?'.base64_encode($mail['them']).'?=',$mail['msg'],$adds);
mysql_query("DELETE FROM `mail_to_send` WHERE `id` = '$mail[id]'");}

// сохранение настроек системы
function save_settings($set){
if (
$fopen=@fopen(H.'sys/dat/settings.ini''w'))
{
$ini_file=array('[SYSTEM]');


foreach (
$set as $key=>$value) {
$ini_file[]=$key.'="'.htmlentities((string)$valueENT_QUOTES'UTF-8').'";';
}


@
fputs($fopenimplode("rn"$ini_file));
@
fclose($fopen);
return 
true;
}
else
return 
false;}


// запись действий администрации
function admin_log($mod,$act,$opis){
global 
$user;

$q=mysql_query("SELECT * FROM `admin_log_mod` WHERE `name` = '".my_esc($mod)."' LIMIT 1");
if (
mysql_num_rows($q)==0)
{
mysql_query("INSERT INTO `admin_log_mod` (`name`) VALUES ('".my_esc($mod)."')");
$id_mod=mysql_insert_id();
}
else 
$id_mod=mysql_result($q0);

$q2=mysql_query("SELECT * FROM `admin_log_act` WHERE `name` = '".my_esc($act)."' AND `id_mod` = '$id_mod' LIMIT 1");
if (
mysql_num_rows($q2)==0)
{
mysql_query("INSERT INTO `admin_log_act` (`name`, `id_mod`) VALUES ('".my_esc($act)."', '$id_mod')");
$id_act=mysql_insert_id();
}
else 
$id_act=mysql_result($q20);





mysql_query("INSERT INTO `admin_log` (`time`, `id_user`, `mod`, `act`, `opis`) VALUES 
('"
.time()."','$user[id]', '$id_mod', '$id_act', '".my_esc($opis)."')");



}

// русское название месяца по его номеру
function rus_mes($num,$pad=1)
{
switch (
$num) {
case 
1:return 'Январ'.($pad?'я':'ь');
case 
2:return 'Феврал'.($pad?'я':'ь');
case 
3:return 'Март'.($pad?'а':'');
case 
4:return 'Апрел'.($pad?'я':'ь');
case 
5:return 'Ма'.($pad?'я':'й');
case 
6:return 'Июн'.($pad?'я':'ь');
case 
7:return 'Июл'.($pad?'я':'ь');
case 
8:return 'Август'.($pad?'а':'');
case 
9:return 'Сентябр'.($pad?'я':'ь');
case 
10:return 'Октябр'.($pad?'я':'ь');
case 
11:return 'Ноябр'.($pad?'я':'ь');
case 
12:return 'Декабр'.($pad?'я':'ь');
default:return 
false;
}
}



// Загрузка остальных функций из папки "sys/fnc"
$opdirbase=opendir(H.'sys/fnc');
while (
$filebase=readdir($opdirbase))
{
if (
preg_match('#.php$#i',$filebase))include_once(H.'sys/fnc/'.$filebase);
}
closedir($opdirbase);




// запись о посещении
mysql_query("INSERT INTO `visit_today` (`ip` , `ua`, `time`) VALUES ('$iplong', '".@my_esc($_SERVER['HTTP_USER_AGENT'])."', '$time')");
?>
f
Онлайн: 2
Реклама