Дополнение "Cron" для LiveStreet 0.3, с опцией удаления пользователей

На самом деле этот скрипт умеет не только удалять пользователей — это своего рода небольшой сборник функций который оформлен в виде дополнения.

Возможности:

1. Автоматическое удаление пользователей с рейтингом ниже определённого порога.

2. Ручное удаление пользователей.

3. Окончательное уничтожение удалённых комментариев.

4. Удаление неиспользуемых изображений.

5. Сохранение отчёта о своей работе в лог файл определённого размера.

Архив со скриптами: Перенесён в раздел «Модули»

Замечание:
Этот скрипт уничтожает комментарии ветками. Если на помеченный как удалённый комментарий пользователи отвечали, то в случае использования этого скрипта будет удалён и коммент родитель и все его потомки. Так же и с пользователями — удаляется и пользователь и все труды его «творчества». В этом есть определённая логика — «не стоит разговаривать с копипастой» и т. д.

Это файл лога, его специально создавать не нужно, он создаётся автоматически (если в настройках разрешено логирование):
/logs/cron.log
Новые записи добавляются, если размер этого файла превышает лимит установленный в конфиге, то файл перезаписывается.

Если админ желает удалить одного или нескольких пользователей независимо от рейтинга, повинуясь желанию своей левой пятки — то ему нужно «скормить» (подложить) скрипту файл:
/config/black_list.txt
Этот файл содержит ники пользователей которые должны быть удалены.
Правило заполнения этого файла очень простое — все ники с новой строки.

Пример:
krevedko
medved
milaffka

Этот файл по окончании выполнения скрипта будет удалён.

Не забываем прописать эти строки в .htaccess:
<Files "cron.php">
  Order Deny,Allow
  Deny from all
  Allow from *IP на котором находится Ваш cron* 
</Files>


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

Я затруднился с копирайтами, поправьте меня если что. Я не возражаю, если там будет упоминание livestreet.ru в качестве офф. сайта, а так же Е-Mail livestreet.ru

Удачи!

48 комментариев

avatar
О! вы невероятно крутой!
  • Vilz
  • +3
avatar
очень интересно насчёт удаления файлов. Попробую поставить, только бекап сделаю на всякий пожарный )
avatar
У меня вопрос, как скрипт удаляет изображения — просто порой изображения хостяться в комментариях и вообще на других сайта- я не хочу их удалять. Как скрипт действует?
avatar
Скрипт ищет вхождения имён файлов в базе. Если в топиках и комментариях файла не обнаружено, он удаляется.
За файлы на других сайтах можете не беспокоиться, этот скрипт их не удалит :-)
avatar
Да ВЫ задолбали мне минусы ставить!
Реально чел остановись!
avatar
А не подскажете как удалять юзеров — которые не активировали свои аккаунты в течении месяца? Просто порой боты пролезают и просто юзеры, которые не удосужились ниразу войти, а красиво имя заняли :)
avatar
а у меня скрипт взял и не сработал! выдает белый экран, лог не создается!
создал файлы там где надо в кодировке utf-8
avatar
У меня он потер юзеров!
Просто так взял и стер 2х юзеров и все их постинги и комментарии!
avatar
//Собираем начальные сведения о комментах 
        $sql = $oDbSimple->select("SELECT comment_id FROM ".DB_TABLE_TOPIC_COMMENT."");
       //Получаем количество строк в таблице комментов
        $rows=count($sql);

Мама, роди меня обратно! :))
бедный, бедный сервер которому придется выполнять это+нижеследующие запросы на каждый результирующий ряд этого. да еще и периодически.
avatar

//Получаем количество строк в таблице комментов
 $sql = $oDbSimple->select("SELECT COUNT(*) FROM ".DB_TABLE_TOPIC_COMMENT."");
 $rows=$sql;

Помоему так гораздо практичнее будет
avatar
Как прошло тестирование, никто кроме hello не пострадал? =)
avatar
Я ажмо на радостях кинулся в раздел «скачать» в надежде увидеть там версию 0.3… ((((
  • mdmx
  • 0
avatar
какая логика запуска скрипта по крону? При каждом заходе проверяется? или привязывается к cron под apache? или к cron из-под пользователя?
avatar
Насчет удаления неиспользуемых изображений, некоторые картинки (например в хаке фотоотчет) лежат по таким адресам
http://site.ru/uploads/photos/5/1/7/8/a/s_c4372bc49c.jpg
После удаления топика фотоотчета изображения остаются там где и были. Подскажите пожалуйста можно ли этим скриптом удалить эти картинки и как вообще скрипт удаляет неиспользуемые изображения. Может его нужно настраивать на определенную папку или он сам все находит? Заранее спасибо.
avatar
Обязательно сначала сделайте эти «манипуляции» на локальной копии сайта.

#############################################
#                       Функция очистки от ненужных изображений 2                          #
############################################

function cleaning_filesystem_2($dirname)  
{

global $oDbSimple;

    if  (is_dir($dirname))
        $dir_handle  =  opendir($dirname);
    if  (!$dir_handle)
        return  false;
     
		//Перебираем
		while(($file  =  readdir($dir_handle))!==false)  {
            if  ($file  !=  "."  &&  $file  !=  ".." && ereg("avatar", $file)!=TRUE)  {
                if  (!is_dir($dirname."/".$file)) {
                   
                    //Проверяем 
                    $sql = $oDbSimple->select("SELECT topic_id FROM ".DB_TABLE_TOPIC_CONTENT." WHERE topic_text_source LIKE '%$file%'");
                    $a=count($sql);
                   
                   //Удаляем
                    if ($a==0) {
                        unlink($dirname."/".$file);
                    }	
					
				}					
					
                else 
			   //Рекурсия
                cleaning_filesystem_2($dirname.'/'.$file, $switch);                       
            }
        }
       //Закрываем
        closedir($dir_handle);
       //Удаляем
        @rmdir($dirname);
       //Возвращаем
        return  true;	 

} 

1. Добавьте эту функцию в файл cron.php
2. Измените в ней следующую строку (при необходимости добавьте строки см. по аналогии):

                    $sql = $oDbSimple->select("SELECT topic_id FROM ".DB_TABLE_TOPIC_CONTENT." WHERE topic_text_source LIKE '%$file%'");


на соответствующие критерии поиска в базе (ну где хранит записи со ссылками модуль фотоальбомы).

3. Вызовите эту функцию с параметром содержащим путь до директории, где хранит изображения модуль фотоальбомы.
avatar
/usr/local/bin/wget http://www.avtoturistu.ru/cron.php?key=КЛЮЧ


Подскажите, пожалуйста, правильно ли запускаю? (wget там есть, проверил)
В manual.txt к cron.php есть только пример запуска каждый час
/usr/bin/wget -O - -q
, а правильно ли я запускал, желая делать чистку по запросу? У меня выскочила ошибка:
Устанавливается соединение с www.avtoturistu.ru|90.156.153.94|:80… соединение установлено.
Запрос HTTP послан, ожидается ответ… 403 Forbidden
15:04:42 ОШИБКА 403: Forbidden.


Проконсультируйте, пожалуйста!

avatar
IP в .htaccess был неправильно указан, извиняюсь за боломучение воды))
avatar
/usr/local/bin/wget http://www.avtoturistu.ru/cron.php?key=КЛЮЧ


значит так правильно? работает?
avatar
да!
avatar
Можно cron.php переименовать и припрятать куда-нить?
avatar
И еще такой вопрос, что в логах значит цифра 1?

*** Clear DB ***
DELETED c: 157 t: 15 r(q): 1
DELETED c: 158 t: 15 r(q): 0

В этом топике почему-то показывает число комментов на 1 меньше, чем их есть на самом деле. Почему? Как исправить?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.