• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Помощь Проблема с БД

Статус
В этой теме нельзя размещать новые ответы.

Pigini

Знаток
Регистрация
28 Апр 2009
Сообщения
173
Реакции
29
1. DLE 8.5
2. Nulled MID
3. Проблема - удаляются записи в БД после сброса кеша.
(выяснил - когда удаляется /engine/cache/system/cron.php, то удаляется часть пользователей)

Началось с того что база делала большую нагрузку и хостер дал день ну устранение проблемы.
Что только не перепробовал. В итоге я удалил все пустые таблицы в БД и тут то началось.
При регистрации общее количество все время уменьшалось - то есть 1 пользователь зарегистрировался и в dle_user если было 3000, то становилось 2999 записей.
Не понимаю что там удалялось, но все последние 100 пользователей из 3000 точно не остались.

Теперь все удаленные таблицы восстановил и попробовал взять старую таблицу dle_user + импортировал новых пользователей, в итоге - 3050 записей в dle_users, НО, после удаление кеша, в dle_user 2080 записей.

В чем проблема?

Если кеш просто удалить с папки cashe, то так же с таблицы dle_users пропадают 70 пользователей.
Получается что где то прописано общее количество пользователей, или как?
 
глянь настройки сайта->Настройки для пользователей->Максимальное количество зарегистрированных пользователей\
 
попробуй сделать ремонт БД в админке + оптимизацию БД. Если ремонт не поможет - то тогда только придется все удалять, ставить заново двиг и восстанавливать все данные с бекапа...
На будущее - даже если таблица сейчас и пустая, но её установил дле при установки - это не значит что их можно удалять, если бы они не использовались двигом - он бы их не ставил для просто так ;)
 
Ограничение не установлено.

Оптимизацию и ремонт делал, но не помогает.
Все работает прекрасно и пользователи все считаются, пока не сбросить кешь сайта.
Значит при новом кеширование куда то скрипт смотрит в базу, где прописано сколько людей всего и сбрасывает в таблицу dle_users лишних.

Кто умный - при сбрасывание кеша, куда движек запросы дает?

P.S. как удаляется понятно -
PHP:
if( $_GET['action'] == "clear" ) {
	
	$fdir = opendir( ENGINE_DIR . '/cache/system/' );
	while ( $file = readdir( $fdir ) ) {
		if( $file != '.' and $file != '..' and $file != '.htaccess' ) {
			@unlink( ENGINE_DIR . '/cache/system/' . $file );
		
		}
	}
	
	clear_cache();
}

Но почему при удаление кеша удаляются записи из таблицы dle_users?
 
Ограничение не установлено.
Оптимизацию и ремонт делал, но не помогает.
Все работает прекрасно и пользователи все считаются, пока не сбросить кешь сайта.
Значит при новом кеширование куда то скрипт смотрит в базу, где прописано сколько людей всего и сбрасывает в таблицу dle_users лишних.
Кто умный - при сбрасывание кеша, куда движек запросы дает?
P.S. как удаляется понятно -
PHP:
if( $_GET['action'] == "clear" ) {
	$fdir = opendir( ENGINE_DIR . '/cache/system/' );
	while ( $file = readdir( $fdir ) ) {
		if( $file != '.' and $file != '..' and $file != '.htaccess' ) {
			@unlink( ENGINE_DIR . '/cache/system/' . $file );
		}
	}
	clear_cache();
}
Но почему при удаление кеша удаляются записи из таблицы dle_users?

Администрирование->Основные настройки->Оптимизация запросов к базе данных...

Покажите ваши настройки
 
Администрирование->Основные настройки->Оптимизация запросов к базе данных...


Выберите тип поиска используемого на сайте: Простой
Включить поддержку регистрации и авторизации на сайте: Да
Включить кеширование на сайте: Да
Включить поддержку мультикатегорий на сайте: Да
Поддержка публикации новостей на еще не наступившую дату: Да
Включить поддержку фиксации новостей на сайте: Да
Включить счетчик просмотров новостей: Да
Кешировать счетчик просмотров новостей: Да
Разрешить пользователям менять порядок сортировки новостей на сайте: Да

Все остальное - Нет
 
Выберите тип поиска используемого на сайте: Простой
Включить поддержку регистрации и авторизации на сайте: Да
Включить кеширование на сайте: Да
Включить поддержку мультикатегорий на сайте: Да
Поддержка публикации новостей на еще не наступившую дату: Да
Включить поддержку фиксации новостей на сайте: Да
Включить счетчик просмотров новостей: Да
Кешировать счетчик просмотров новостей: Да
Разрешить пользователям менять порядок сортировки новостей на сайте: Да
Все остальное - Нет
Включить кеширование на сайте: Нет
Кешировать счетчик просмотров новостей: Нет
Разрешить пользователям менять порядок сортировки новостей на сайте: Нет

так попробуйте, либо возьмите и скопируйте стандартные настройки DLE, файлик config.php, патом попробуйте почистить хеш на сайте
 
Все отлично до того времени, пока не очищаю кеш.
Сразу удаляются часть пользователей с базы..

Даже если руками пробовать удалять кеш..
Понял от куда все!

Если в кеше удалять руками файлы то все ок, кеш обновляется, КРОМЕ -
/engine/cache/system/cron.php
Если его удалить то удаляется часть пользователей в dle_users.
Права стоят 666

вот файл /engine/modules/cron.php, как я понимаю, именно он кеш тот и делает, при удаление которого удаляется часть пользователей
PHP:
if( ! defined( 'DATALIFEENGINE' ) ) {
	die( "Hacking attempt!" );
}

set_vars( "cron", $_TIME );

if( $config['cache_count'] ) {
	$result = $db->query( "SELECT COUNT(*) as count, news_id FROM " . PREFIX . "_views GROUP BY news_id" );
	
	while ( $row = $db->get_array( $result ) ) {
		
		$db->query( "UPDATE " . PREFIX . "_post set news_read=news_read+{$row['count']} where id='{$row['news_id']}'" );
	
	}
	
	$db->free( $result );
	$db->query( "TRUNCATE TABLE " . PREFIX . "_views" );
	clear_cache( 'news_' );
}

if( $cron == 2 ) {
	
	$db->query( "DELETE FROM " . USERPREFIX . "_banned WHERE days != '0' AND date < '$_TIME' AND users_id = '0'" );
	@unlink( ENGINE_DIR . '/cache/system/banned.php' );
	
	$sql_cron = $db->query( "SELECT news_id, action FROM " . PREFIX . "_post_log WHERE expires <= '" . $_TIME . "'" );
	
	while ( $row = $db->get_row( $sql_cron ) ) {

		if ( $row['action'] == 1 ) {

			$db->query( "UPDATE " . PREFIX . "_post SET approve='0' WHERE id='{$row['news_id']}'" );
	
		} elseif ( $row['action'] == 2 ) {

			$db->query( "UPDATE " . PREFIX . "_post SET allow_main='0' WHERE id='{$row['news_id']}'" );

		} elseif ( $row['action'] == 3 ) {

			$db->query( "UPDATE " . PREFIX . "_post SET fixed='0' WHERE id='{$row['news_id']}'" );
	
		} else {
		
			$db->query( "DELETE FROM " . PREFIX . "_comments WHERE post_id='{$row['news_id']}'" );
			$db->query( "DELETE FROM " . PREFIX . "_poll WHERE news_id='{$row['news_id']}'" );
			$db->query( "DELETE FROM " . PREFIX . "_poll_log WHERE news_id='{$row['news_id']}'" );
			$db->query( "DELETE FROM " . PREFIX . "_tags WHERE news_id = '{$row['news_id']}'" );
			$db->query( "DELETE FROM " . PREFIX . "_post WHERE id='{$row['news_id']}'" );
			
			$row_1 = $db->super_query( "SELECT images  FROM " . PREFIX . "_images where news_id = '{$row['news_id']}'" );
			
			$listimages = explode( "|||", $row_1['images'] );
			
			if( $row_1['images'] != "" ) foreach ( $listimages as $dataimages ) {
				$url_image = explode( "/", $dataimages );
				
				if( count( $url_image ) == 2 ) {
					
					$folder_prefix = $url_image[0] . "/";
					$dataimages = $url_image[1];
				
				} else {
					
					$folder_prefix = "";
					$dataimages = $url_image[0];
				
				}
				
				@unlink( ROOT_DIR . "/uploads/posts/" . $folder_prefix . $dataimages );
				@unlink( ROOT_DIR . "/uploads/posts/" . $folder_prefix . "thumbs/" . $dataimages );
			}
			
			$db->query( "DELETE FROM " . PREFIX . "_images WHERE news_id = '{$row['news_id']}'" );
			
			$getfiles = $db->query( "SELECT id, onserver FROM " . PREFIX . "_files WHERE news_id = '{$row['news_id']}'" );
			
			while ( $row_1 = $db->get_row( $getfiles ) ) {
				
				@unlink( ROOT_DIR . "/uploads/files/" . $row_1['onserver'] );
			
			}
			$db->free( $getfiles );
			
			$db->query( "DELETE FROM " . PREFIX . "_files WHERE news_id = '{$row['news_id']}'" );

		}
	
	}
	
	$db->query( "DELETE FROM " . PREFIX . "_post_log WHERE expires <= '" . $_TIME . "'" );
	
	$db->free( $sql_cron );
	
	if( intval( $config['max_users_day'] ) ) {
		$thisdate = $_TIME - ($config['max_users_day'] * 3600 * 24);
		
		$sql_result = $db->query( "SELECT name, user_id, foto FROM " . USERPREFIX . "_users WHERE lastdate < '$thisdate' and user_group = '4'" );
		
		while ( $row = $db->get_row( $sql_result ) ) {

			$db->query( "DELETE FROM " . USERPREFIX . "_pm WHERE user_from = '{$row['name']}' AND folder = 'outbox'" );
			$db->query( "DELETE FROM " . USERPREFIX . "_pm WHERE user='{$row['user_id']}'" );
			$db->query( "DELETE FROM " . USERPREFIX . "_banned WHERE users_id='{$row['user_id']}'" );
			$db->query( "DELETE FROM " . USERPREFIX . "_users WHERE user_id = '{$row['user_id']}'" );
			@unlink( ROOT_DIR . "/uploads/fotos/" . $row['foto'] );
		}

		$db->free( $sql_result );
		
	}
	
	if( intval( $config['max_image_days'] ) ) {
		$thisdate = $_TIME - ($config['max_image_days'] * 3600 * 24);
		
		$db->query( "SELECT images  FROM " . PREFIX . "_images where date < '$thisdate' AND news_id = '0'" );
		
		while ( $row = $db->get_row() ) {
			
			$listimages = explode( "|||", $row['images'] );
			
			if( $row['images'] != "" ) foreach ( $listimages as $dataimages ) {
				$url_image = explode( "/", $dataimages );
				
				if( count( $url_image ) == 2 ) {
					
					$folder_prefix = $url_image[0] . "/";
					$dataimages = $url_image[1];
				
				} else {
					
					$folder_prefix = "";
					$dataimages = $url_image[0];
				
				}
				
				@unlink( ROOT_DIR . "/uploads/posts/" . $folder_prefix . $dataimages );
				@unlink( ROOT_DIR . "/uploads/posts/" . $folder_prefix . "thumbs/" . $dataimages );
			}
		
		}
		
		$db->free();
		
		$db->query( "DELETE FROM " . PREFIX . "_images where date < '$thisdate' AND news_id = '0'" );
	
	}
	
	clear_cache();

}


---------- Post added at 01:42 ---------- Previous post was Вчера at 23:58 ----------

Перезалил файл /engine/modules/cron.php и проблема пропала.
Всем спасибо за содействие!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху