1

Тема: Удаление файлов аватаров без юзеров на PUNBB.

В папочке "/img/avatars " форума на движке PUNBB  есть очень много аватаров.
Некоторые аватары без юзеров в базе, а значит не используются и лишние.
Удаляем такие.

<?php  // ДЛЯ АНГЛ ФОРУМА!
echo "<br>подкл к БД...";
  //  ЕСЛИ НЕТ НИКОВ
$file_ini = file("boris.ini");
$host="localhost";
$user=trim($file_ini[0]);
$pwd=trim($file_ini[1]);
$database_name=trim($file_ini[2]);
$db=mysql_connect($host,$user,$pwd);
echo "<br>   {$database_name} - {$user} - {$pwd} <br>";
mysql_select_db($database_name,$db); 
mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='cp1251'");
mysql_query("SET character_set_results='cp1251'");

echo "читаем имена файлов аватаров";
$dir    = '../img/avatars';
$files1 = scandir($dir);
chdir ($dir);
echo " <br> " . getcwd() . " <br> ";
foreach($files1 as $filename)  { 
if ($filename != '.' && $filename != '..') {
 
 // по имени файла аватара ищем в базе ник, если ника нет - то стереть ненужный аватар. 
  $myfile = substr($filename,0,strlen($filename)-4); ;       //имя файла аватара без расширения  (цифры)
 //echo  " $myfile - $filename";
$query = mysql_query("select * from users WHERE id = '$myfile' ")  or die("Invalid query" . mysql_error());     // ищем ник в БД по имени файла аватара
while ($row = mysql_fetch_assoc($query)) {
$nik = $row['username'];   // логин
$num_posts = $row['num_posts'];    // кол-во постов 
 echo $myfile . "//" . $nik  . "* постов: ". $num_posts ; 
if  (empty ($nik)) {   //  если с учетом кол-ва постов, то (($num_posts == "5") or empty ($nik))
echo " УДАЛЯЕМ " . $filename ;
 unlink ($filename);
print_r(error_get_last()); 
    }
echo " <br> ";
}
  }
 }
mysql_close($db);        
echo "<br>закрыли БД";
                ?>

Есть еще проблема - у некоторых ников (юзеров) по два соответсвующих файла аватаров, но с  разными расширениями.
Как понять - какой аватар у ника?

Вот соответствие с таблицы users поля avatar:

define('FORUM_AVATAR_NONE', 0);
define('FORUM_AVATAR_GIF', 1);
define('FORUM_AVATAR_JPG', 2);
define('FORUM_AVATAR_PNG', 3);

Поделиться

2

Re: Удаление файлов аватаров без юзеров на PUNBB.

Вот скрипт для удаления одинаковых аватаров - совпадение номера аватара, но разные расширения.
Пример, у юзера с id = 1747  есть два файла 1747.gif  и 1747.jpg

<?php  // ДЛЯ АНГЛ ФОРУМА!
echo "<br>подкл к БД...";
  //  ЕСЛИ НЕТ НИКОВ
$file_ini = file("boris.ini");
$host="localhost";
$user=trim($file_ini[0]);
$pwd=trim($file_ini[1]);
$database_name=trim($file_ini[2]);
$db=mysql_connect($host,$user,$pwd);
echo "<br>   {$database_name} - {$user} - {$pwd} <br>";
mysql_select_db($database_name,$db); 
mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='cp1251'");
mysql_query("SET character_set_results='cp1251'");

echo "читаем имена файлов аватаров";
$dir    = '../img/avatars';
$files1 = scandir($dir);

chdir ($dir);

echo " <br> " . getcwd() . " <br> ";     // Получить имя текущего рабочего каталога

$query = mysql_query("select * from users")  or die("Invalid query" . mysql_error());     // ищем ник в БД по имени файла аватара
while ($row = mysql_fetch_assoc($query)) {
$userid = $row['id'];
$nik = $row['username'];   // логин
$avatar = $row['avatar'];
if ($avatar =="2") {
$avatar =  "jpg";
}
if ($avatar =="1") {
$avatar =  "gif";
}

echo "<br>" . $userid . " ". $nik  . " аватар: ". $avatar ;
foreach($files1 as $filename)  
{ 
  if ($filename != '.' && $filename != '..') 
  {

$myfile = substr($filename,0,strlen($filename)-4); ;       //имя файла аватара без расширения  (цифры)
$Extension =    substr($filename, strrpos($filename, '.') + 1);
if  ($userid == $myfile)    
{     

if (($avatar =="jpg") and ($Extension =="gif"))  {
echo " Стереть " .   $filename;
}
if (($avatar =="gif") and ($Extension =="jpg"))  {
echo " Стереть " .   $filename;
unlink ($filename);         //6616
}
print_r(error_get_last());
echo " <br> ";
}
    }
}
}

mysql_close($db);        
echo "<br>закрыли БД";
                ?>

Поделиться