Файл: sys/inc/fnc.php
Строк: 169
<?php
#Защита от частых запросов с одного 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 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 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;
}
}
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='alert alert-danger'><i class='fa fa-exclamation-triangle fa-fw'></i> $value</div>n";
}
} else {
echo "<div class='alert alert-danger'><i class='fa fa-exclamation-triangle fa-fw'></i> $err</div>n";
}
}
}
function msg($msg) {
global $passgen;
echo "<div class='alert alert-success'><i class='fa fa-check fa-fw'></i> $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')");