Перейти к контенту
  • 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 программисту видимо не составит, а вот чайнику типа меня ;)

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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