Перейти к контенту
  • 0

Чистка ibf_attachments


airr

Вопрос

Не найдена мной тема, которая ответила бы на мой вопрос.

 

Существует ли стандартная задача, которая удаляет неприкрепленные аттачи, которая запускается периодически?

И вообще, что происходит с файлами, которые были загружены, но не прикреплены?

Если, например, пользователь закачал файлы и передумал создавать тему?

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Существует ли стандартная задача, которая удаляет неприкрепленные аттачи, которая запускается периодически?

 

нет, есть функция которая запускается ручками для удаления атачей не имеющих связей

 

И вообще, что происходит с файлами, которые были загружены, но не прикреплены?

 

остаются на сервере, если не путаю. В конце концв можно потестить :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Подскажите что за функция такая? Действительно файлы остаются на сервере и их потом будет сложно обнаружить. Ещё заметил, что удалив через админку аттачи пользователей, эти самые аттачи всё-равно остаются на сервере, это нормально?
Ссылка на комментарий
Поделиться на других сайтах

  • 0
нет, есть функция которая запускается ручками для удаления атачей не имеющих связей

вот бы знать что за функция :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Для 1.х вкупе с mJournal в свое время писал функцию поска "потерянных" файлов. Писал для стандартных модулей, вот код:

	function do_search_ibf()
{
	global $ibforums, $DB, $std;

	if ( $ibforums->member['mgroup'] == $ibforums->vars['admin_group'] )
	{
		@set_time_limit(0);
		list($usec, $sec) = explode(" ", microtime());
  			$timer_start = ((float)$usec + (float)$sec);
		$this->result = "";
		// Собираем массив файлов в директории:
		$all_count = 0;
		$filez = array();
		$dir_files = opendir($ibforums->vars['base_dir']."uploads");
		while(false !== ($file = readdir($dir_files))) 
		{
			if($file != '.' && $file != '..')
			{
				$filez[] = $file; 
				$all_count++;
			}
		}
		// Исключаем известные базе аттачи:
		$unset = array();
		// ... в постах
		$DB->query("SELECT attach_id FROM ibf_posts WHERE LENGTH(attach_id)>5");
		while($row = $DB->fetch_row())$unset[] = $row['attach_id'];
		// ... в журналах
		$DB->query("SELECT attach_id FROM ibf_jposts WHERE LENGTH(attach_id)>5");
		while($row = $DB->fetch_row())$unset[] = $row['attach_id'];
		// ... в камментах
		$DB->query("SELECT attach_id FROM ibf_jcomments WHERE LENGTH(attach_id)>5");
		while($row = $DB->fetch_row())$unset[] = $row['attach_id'];

		// Исключаем известные базе аватары:
		$DB->query("SELECT avatar FROM ibf_members");
		while($row = $DB->fetch_row())if( substr($row['avatar'],0,7) == "upload:" )$unset[] = substr($row['avatar'],7);
		// Исключаем известные базе фотографии:
		$DB->query("SELECT photo_location, j_photo FROM ibf_member_extra WHERE photo_type = 'upload' OR j_photo_type = 'upload'");
		while($row = $DB->fetch_row())
		{
			if( substr($row['photo_location'],0,6) == "photo-" )$unset[] = $row['photo_location'];
			if( $row['photo_location'] != $row['j_photo'] and substr($row['j_photo'],0,6) == "photo-" )$unset[] = $row['j_photo'];
		}
		// Обновляем массив файлов:
		foreach($filez as $k=>$v)if(in_array($v,$unset))unset($filez[$k]);

		// Интерфейс:
		$filesise_all = 0;
		foreach($filez as $k=>$v)
		{
			if(is_file($ibforums->vars['base_dir']."uploads/".$v))
			{
				$filesise = filesize($ibforums->vars['base_dir']."uploads/".$v);
				$filesise_all += $filesise;
				$filez[$k] = '<a href="'.$ibforums->vars['upload_url'].'/'.$v.'">'.$v.'</a> ('.round($filesise/1024)."Кб) [<a href='".$ibforums->base_url."act=module&module=clean&who_clean=del_file&del_file=".$v."' target='_blank'>X</a>]";
			}
		}
		sort($filez);
		$filesise_all = round($filesise_all/1024);
		if(count($filez))
		{
			$this->result .= "<h4 align=center>Найдено ".count($filez)." «потерянных» файлов общим весом ".$filesise_all." Кб из ".$all_count." проверенных:</h4><ol>";
			$this->result .= "<li>".implode("<li>",$filez);
			$this->result .= "</ol>";
		}
		else
		{
			$this->result .= "<h4 align=center>Проверено ".$all_count." файлов, «потерянных» не найдено.</h4>";
		}
		list($usec, $sec) = explode(" ", microtime());
  			$timer_end = ((float)$usec + (float)$sec);
		$this->result .= "</ol><div align=center>Поиск занял ".($timer_end-$timer_start)." секунд.</div><h4 align=center>Новый поиск:</h4>";

		$this->result .= '<div align="center"><form action="" method="post">
		<input type="hidden" name="act" value="module">
		<input type="hidden" name="module" value="clean">
		<strong>Что искать:</strong>  <select name="who_clean">
		<option value="arc_files">Неудаленные архивы</option>
		<option value="attachs">Неудаленные аттачи</option>
		<option value="bcps">Бекапы редактирования сообщений</option>
		</select> <input type="submit" name="ok" value=">>>">  
		</form></div>';
	}
	else
	{
		$this->result = "You're not an admin!";
	}
}

Думаю, переписать для старших версий движка большого труда не составит.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Думаю, переписать для старших версий движка большого труда не составит.

:D программисту видимо не составит, а вот чайнику типа меня ;)

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.