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

// для 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);
    }

}

function 
img($name){
    return 
"<img src = '/style/img/$name' />";
}
function 
__() {
    
$args = func_get_args();
    
$args_num = count($args);
    if (!
$args_num) {
        
#нет ни строки ни параметров, вообще нихрена
        
return '';
    } else {
        
    }
}

#Защита от частых запросов с одного 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);
}


// бан по 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) > 3 && 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 
getChmodToRead($is_dir = false) {
    if (
$is_dir) {
        return 
0500;
    } else {
        return 
0400;
    }
}

// рекурсивное удаление папки
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'");
        
$od = opendir(H . 'sys/tmp/');
        while (
$rd = readdir($od)) {
            if (!
preg_match('#^.#', $rd) && filectime(H . 'sys/tmp/' . $rd) < $time - 60 * 60 * 24) {
                @
delete_dir(H . 'sys/tmp/' . $rd);
            }
        }
        
closedir($od);
    }
}


// Подведение итогов статистики
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 * 24) {
        if (
function_exists('set_time_limit'))
            @
set_time_limit(600); // Ставим ограничение на 10 минут
        
$last_day = mktime(0, 0, 0, date('m'), date('d') - 1); // начало вчерашних суток
        
$today_time = mktime(0, 0, 0); // начало сегодняшних суток
        
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `visit_everyday` WHERE `time` = '$last_day'"), 0) == 0) {
            
$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 get_user($user_id = 0) {
    if (
$user_id == 0) {
// бот
        
$ank2['id'] = 0;
        
$ank2['nick'] = 'Система';
        
$ank2['level'] = 999;
        
$ank2['sex'] = 1;
        
$ank2['ncolor'] = '#FF0000';
        
$ank2['ncolor2'] = '#FF0000';
        
$ank2['group_name'] = 'Системный робот';
        
$ank2['ank_about_me'] = 'Создан для уведомлений';


        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];
    }
}

// определение оператора
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 number($num, $one, $two, $more) {
    
$num = (int) $num;
    
$l2 = substr($num, strlen($num) - 2, 2);

    if (
$l2 >= 5 && $l2 <= 20) {
        return 
$more;
    }
    
$l = substr($num, strlen($num) - 1, 1);
    switch (
$l) {
        case 
1:return $one;
            break;
        case 
2:return $two;
            break;
        case 
3:return $two;
            break;
        case 
4:return $two;
            break;
        default:return 
$more;
            break;
    }
}

function 
vremja($time = null, $adaptive = true) {
    if (
$time > TIME) {
        
$time -= TIME;
        
$mes = 0;
        
$day = 0;
        
$hour = 0;
        
$min = 0;
        
$sec = 0;
        if (
$time) {
            
$sec = $time % 60;
        }
        if (
$time >= 60) {
            
$min = floor($time / 60 % 60);
        }
        if (
$time >= 3600) {
            
$hour = floor($time / 3600 % 24);
        }
        if (
$time >= 86400) {
            
$day = floor($time / 86400 % 30);
        }
        if (
$time >= 2592000) {
            
$mes = floor($time / 2592000 % 12);
        }

        if (
$mes) {
            return 
$mes . ' месяц' . number($mes, '', 'а', 'ев') . ($day ? (', ' . $day . ' ' . number($day, 'день', 'дня', 'дней') . ($hour ? ' и ' . $hour . ' час' . number($hour, '', 'а', 'ов') : '')) : '');
        }
        if (
$day) {
            return 
$day . ' ' . number($day, 'день', 'дня', 'дней') . ($hour ? (', ' . $hour . ' час' . number($hour, '', 'а', 'ов') . ($min ? ' и ' . $min . ' минут' . number($min, 'а', 'ы', '') : '')) : '');
        }
        if (
$hour) {
            return 
$hour . ' час' . number($hour, '', 'а', 'ов') . ($min ? (', ' . $min . ' минут' . number($min, 'а', 'ы', '') . ($sec ? ' и ' . $sec . ' секунд' . number($sec, 'а', 'ы', '') : '')) : '');
        }
        if (
$min) {
            
        }
        return 
$min . ' минут' . number($min, 'а', 'ы', '') . ($sec ? ' и ' . $sec . ' секунд' . number($sec, 'а', 'ы', '') : '');
        return 
$sec . ' секунд' . number($sec, 'а', 'ы', '');
    } else {
        global 
$user;
        if (!
$time) {
            
$time = TIME;
        }
        if (
$user['group_access']) {
            
$time_shift = $user['set_timesdvig'];
        } else {
            
$time_shift = 0;
        }
        
$time = $time + $time_shift * 3600;
        
$vremja = date('j M Y в H:i', $time);
        
$time_p[0] = date('j n Y', $time);
        
$time_p[1] = date('H:i', $time);

        if (
$adaptive && $time_p[0] == date('j n Y', TIME + $time_shift * 60 * 60)) {
            
$vremja = "" . date("H:i", $time);
        }
        if (
$adaptive && $time_p[0] == date('j n Y', TIME - 60 * 60 * (24 - $time_shift))) {
            
$vremja = "Вчера в " . date("H:i", $time);
        }
        if (
$adaptive && $time_p[0] == date('j n Y', TIME - 60 * 60 * (48 - $time_shift))) {
            
$vremja = "Позавчера в " . date("H:i", $time);
        }
        if (
$adaptive && $time_p[0] == date('j n Y', TIME - 60 * 60 * (72 - $time_shift))) {
            
$vremja = "3 дня назад (" . date("H:i", $time) . ")";
        }
        if (
$adaptive && $time_p[0] == date('j n Y', TIME - 60 * 60 * (96 - $time_shift))) {
            
$vremja = "4 дня назад (" . date("H:i", $time) . ")";
        }
        if (
$adaptive && $time_p[0] == date('j n Y', TIME - 60 * 60 * (120 - $time_shift))) {
            
$vremja = "5 дней назад (" . date("H:i", $time) . ")";
        }
        if (
$adaptive && $time_p[0] == date('j n Y', TIME - 60 * 60 * (144 - $time_shift))) {
            
$vremja = "6 дней назад (" . date("H:i", $time) . ")";
        }
        if (
$adaptive && $time_p[0] == date('j n Y', TIME - 60 * 60 * (168 - $time_shift))) {
            
$vremja = "неделю назад (" . date("H:i", $time) . ")";
        }
        
$vremja = str_replace('Jan', __('Янв'), $vremja);
        
$vremja = str_replace('Feb', __('Фев'), $vremja);
        
$vremja = str_replace('Mar', __('Марта'), $vremja);
        
$vremja = str_replace('May', __('Мая'), $vremja);
        
$vremja = str_replace('Apr', __('Апр'), $vremja);
        
$vremja = str_replace('Jun', __('Июня'), $vremja);
        
$vremja = str_replace('Jul', __('Июля'), $vremja);
        
$vremja = str_replace('Aug', __('Авг'), $vremja);
        
$vremja = str_replace('Sep', __('Сент'), $vremja);
        
$vremja = str_replace('Oct', __('Окт'), $vremja);
        
$vremja = str_replace('Nov', __('Ноября'), $vremja);
        
$vremja = str_replace('Dec', __('Дек'), $vremja);
        return 
$vremja;
    }
}

function 
times($times) {
    global 
$set, $time;
    static 
$users;
    
$lama = round(($time - $times) / 60);
    if (
$lama < 1) {
        
$lama = 'только что';
    }
    if (
$lama >= 1 && $lama < 60) {
        if (
$lama == 1) {
            
$min = "минуту";
        } elseif (
$lama >= 2 && $lama <= 4) {
            
$min = "минуты";
        } elseif (
$lama >= 5) {
            
$min = "минут";
        }
        
$lama = "$lama $min назад";
    }
    if (
$lama >= 60 && $lama < 1440) {
        
$lama = round($lama / 60);
        if (
$lama == 1) {
            
$hour = "час";
        } elseif (
$lama >= 2 && $lama <= 4) {
            
$hour = "часа";
        } elseif (
$lama >= 5) {
            
$hour = "часов";
        }
        
$lama = "$lama $hour назад";
    }
    if (
$lama >= 1440) {
        
$lama = round($lama / 60 / 24);
        if (
$lama == 1) {
            
$day = "день";
        } elseif (
$lama >= 2 && $lama <= 4) {
            
$day = "дня";
        } elseif (
$lama >= 5 && $lama <= 20) {
            
$day = "дней";
        } elseif (
$lama == 21) {
            
$day = "день";
        } elseif (
$lama >= 22 && $lama <= 24) {
            
$day = "дня";
        } elseif (
$lama >= 25) {
            
$day = "дней";
        }


        
$lama = "$lama $day назад";
    }
    return 
$lama;
}

function 
sictime($timediff) {
    
$oneMinute = 60;
    
$oneHour = 60 * 60;
    
$oneDay = 60 * 60 * 24;
    
$dayfield = floor($timediff / $oneDay);
    
$hourfield = floor(($timediff - $dayfield * $oneDay) / $oneHour);
    
$minutefield = floor(($timediff - $dayfield * $oneDay - $hourfield * $oneHour) / $oneMinute);
    
$secondfield = floor(($timediff - $dayfield * $oneDay - $hourfield * $oneHour - $minutefield * $oneMinute));
    
$time_1 = "$hourfield ч. $minutefield м. $secondfield сек.";
    return 
$time_1;
}

#Вывод названия месяца

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

// только для зарегистрированых
function only_reg($link = NULL) {
    global 
$user;
    if (!isset(
$user)) {
        if (
$link == NULL) {
            
$link = H . 'index.php?' . SID;
        }
        
header("Location: $link");
        exit;
    }
}

// только для незарегистрированых
function only_unreg($link = NULL) {
    global 
$user;
    if (isset(
$user)) {
        if (
$link == NULL) {
            
$link = H . '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;
        if (
function_exists('set_time_limit')) {
            @
set_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) . "'"); // удаление неактивированных аккаунтов

        
$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;
    global 
$passgen;
    if (isset(
$err)) {
        if (
is_array($err)) {
            foreach (
$err as $key => $value) {
                echo 
"<div class='err'>$value</div>n";
            }
        } else {
            echo 
"<div class='err'>$err</div>n";
        }
    }
}

function 
msg($msg) {
    global 
$passgen;
    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 time_limit($time) {
    if (
SET_TIME_LIMIT && @set_time_limit($time)) {
        return 
true;
    } else {
        
false;
    }
}

#сохранение настроек системы

function save_settings($set) {
    if (
$fopen = @fopen(H . 'sys/ini/settings.ini', 'w')) {
        
$ini_file = array('[SYSTEM]');


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


        @
fputs($fopen, implode("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` = '" . mysql_real_escape_string($mod) . "' LIMIT 1");
    if (
mysql_num_rows($q) == 0) {
        
mysql_query("INSERT INTO `admin_log_mod` (`name`) VALUES ('" . mysql_real_escape_string($mod) . "')");
        
$id_mod = mysql_insert_id();
    } else {
        
$id_mod = mysql_result($q, 0);
    }

    
$q2 = mysql_query("SELECT * FROM `admin_log_act` WHERE `name` = '" . mysql_real_escape_string($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 ('" . mysql_real_escape_string($act) . "', '$id_mod')");
        
$id_act = mysql_insert_id();
    } else {
        
$id_act = mysql_result($q2, 0);
    }

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

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

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