View file sys/inc/cron.php

File size: 4.62Kb
<?php
// очистка временной папки
if ( !isset( $hard_process ) ) {
    $q = db::query("SELECT * FROM `cron` WHERE `id` = 'clear_tmp_dir'");
    if (  $q->fetch_row() == 0 )
        db::query("INSERT INTO `cron` (`id`, `time`) VALUES ('clear_tmp_dir', '$time')");
    $clear_dir =  $q->fetch_assoc();
    if ( !$clear_dir['time'] || $clear_dir['time'] < $time - 60 * 60 * 24 ) {
        $hard_process = true;
        db::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 = db::query("SELECT * FROM `cron` WHERE `id` = 'visit' LIMIT 1");
    if (  $q->fetch_row() == 0 )
        db::query("INSERT INTO `cron` (`id`, `time`) VALUES ('visit', '$time')");
    $visit =  $q->fetch_assoc();
    if ( $visit['time'] == NULL || $visit['time'] < time() - 60 * 60 * 24 ) {
        if ( function_exists( 'set_time_limit' ) )
            @set_time_limit( 600 );
        $last_day   = mktime( 0, 0, 0, date( 'm' ), date( 'd' ) - 1 );
        $today_time = mktime( 0, 0, 0 );
        if ( db::count("SELECT COUNT(*) FROM `visit_everyday` WHERE `time` = '$last_day'") == 0 ) {
            $hard_process = true;
            db::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')");
            db::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'];
}
if ( !isset( $hard_process ) ) {
    $q = db::query("SELECT * FROM `cron` WHERE `id` = 'everyday'");
    if (  $q->fetch_row() == 0 )
        db::query("INSERT INTO `cron` (`id`, `time`) VALUES ('everyday', '" . time() . "')");
    $everyday =  $q->fetch_assoc();
    if ( $everyday['time'] == NULL || $everyday['time'] < time() - 60 * 60 * 24 ) {
        $hard_process = true;
        if ( function_exists( 'set_time_limit' ) )
            @set_time_limit( 600 ); // Ставим ограничение на 10 минут
        db::query("UPDATE `cron` SET `time` = '" . time() . "' WHERE `id` = 'everyday'");
        db::query("DELETE FROM `guests` WHERE `date_last` < '" . ( time() - 600 ) . "'");
        db::query("DELETE FROM `chat_post` WHERE `time` < '" . ( time() - 60 * 60 * 24 ) . "'"); // удаление старых постов в чате
        db::query("DELETE FROM `user` WHERE `activation` != null AND `time_reg` < '" . ( time() - 60 * 60 * 24 ) . "'"); // удаление неактивированных аккаунтов
        // удаляем все контакты, помеченные на удаление более месяца назад
        $qd = db::query("SELECT * FROM `users_konts` WHERE `type` = 'deleted' AND `time` < " . ( $time - 60 * 60 * 24 * 30 ) );
        while ( $deleted =  $qd->fetch_array() ) {
            db::query( "DELETE FROM `users_konts` WHERE `id_user` = '$deleted[id_user]' AND `id_kont` = '$deleted[id_kont]'");
            if ( db::count("SELECT COUNT(*) FROM `users_konts` WHERE `id_kont` = '$deleted[id_user]' AND `id_user` = '$deleted[id_kont]'") == 0 ) {
                // если юзер не находится в контакте у другого, то удаляем и все сообщения
                db::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 = db::query( 'SHOW TABLES FROM ' . $set['mysql_db_name']);
        for ( $i = 0; $i <  $tab->fetch_row(); $i++ ) {
            db::query("OPTIMIZE TABLE `" . mysql_tablename( $tab, $i ) . "`"); // оптимизация таблиц
        }
    }
}