Что нового

Удалить не используемые картинки - как? (1 Viewer)

  • Автор темы shalex290485
  • Дата начала
а как выглядит это в самой базе данных? мне нужна строка из бд.
Есть где прописана ссылка с тегами [thumb]http://site.ru/uploads/posts/2019-08/1566708008-693048945-eyforiya-1.jpg[/thumb]
А есть где просто ссылка http://site.ru/uploads/posts/2019-08/1566708008-693048945-eyforiya-1.jpg

не знаю, важно это или нет. Но лучше сразу напишу. Ну и файлы могут быть jpg, а может webp
 
и с той новостью, где прописаны скриншоты
 
PHP:
<?php
// Прописываем константы, чтобы скрипты DLE завелись
define('DATALIFEENGINE', true);
define('ROOT', __DIR__);

// Подключаем классы и данные к бд
include_once ROOT . '/engine/classes/mysql.php';
include_once ROOT . '/engine/data/dbconfig.php';

// Делаем выборку, выбираем только доп. поля
$sql_select = 'SELECT xfields FROM dle_post ORDER by id ASC;';
$db->query($sql_select);

// Подсчитываем файлы
$files = 0;

// Создаём массив с удалёнными файлами
$pictures = [];

// Название доп. поля
$xf_name = 'НАЗВАНИЕ ПОЛЯ';

// Выбираем тип доп. поля:
//  - gallery - если поле тип поля поддерживает загрузку изображений
//  - lines - если ссылки в поле прописаны как http://site.ru/uploads/posts/2022-01/изображение.jpg
//  - formated_lines - форматированые ссылки, которые вставляются как [thumb]http://site.ru/uploads/posts/2022-01/изображение.jpg[/thumb]
$xf_type = 'gallery';

/**
 * Форматируем размер файла
 *
 * @param int $size
 * @return string
 */
function format_bytes(int $size){
   $base = log($size, 1024);
   $suffixes = array('', 'KB', 'MB', 'GB', 'TB', 'PB');
   return round(1024 ** ($base - floor($base)), 2) . ' ' . $suffixes[floor($base)];
}

/**
 * Функция по удалению изображений
 *
 * @param $image
 * @return bool
 */
function deleteImage($image) {
   global $files, $pictures;
   // Разбираем изображение на пути
   $path_info = pathinfo($image);
   
   // Смотрим в какой папке лежит изображения и сохраняем путь в новую переменную
   $img_dir = dirname($image);
   
   // Если у файла нет типа, то возвращаем отризательный ответ
   if (!isset($path_info['extension'])) return false;
   
   // Путь до уменьшенной копии
   $thumb_path = $img_dir . '/thumb/' . $path_info['basename'];
   // Путь до средней копии
   $medium_path = $img_dir . '/medium/' . $path_info['basename'];
   
   // Проверяем, есть ли уменьшенная копия
   if (file_exists($thumb_path)) {
      // Если есть, то вносим в массив данных по удалённым изображений
      $pictures[$thumb_path] = format_bytes(filesize($thumb_path));
      // Пытаемся удалить файл с сервера
      @unlink($thumb_path);
      // Увеличиваем счётчик удалённых файлов
      $files++;
   }
   
   // Проверяем, есть ли средняя копия
   if (file_exists($medium_path)) {
      // Если есть, то вносим в массив данных по удалённым изображений
      $pictures[$medium_path] = format_bytes(filesize($medium_path));
      // Пытаемся удалить файл с сервера
      @unlink($medium_path);
      // Увеличиваем счётчик удалённых файлов
      $files++;
   }
   
   // Проверяем, есть ли сомо изображение
   if (file_exists($image)) {
      // Если есть, то вносим в массив данных по удалённым изображений
      $pictures[$image] = format_bytes(filesize($image));
      // Пытаемся удалить файл с сервера
      @unlink($image);
      // Увеличиваем счётчик удалённых файлов
      $files++;
   }
   
   return true;
}

// Проверяем каждую новость
while($row = $db->get_row()) {
   // Распиливаем поля
   $xfs = explode('||', $row['xfields']);
   // Проверяем каждое поле
   foreach($xfs as $x) {
      // Снова распил
      $xf = explode('|', $x);
      // Проверям на нужное поле, название поля вписываем на латинице
      if($xf[0] === $xf_name) {
         
         switch($xf_type) {
            case 'gallery':
               // Пилим массив данных о изображениях и создаём новый, если в поле несколько изображений
               $image_data = explode(',', $xf[1]);
               // Разбираем каждое изображение в массиве изображений
               foreach ($image_data as $img) {
                  // Пилим данные об изображении в новый массив
                  $i_data = explode('&#124;', $img);
                  // Создаём путь до картинки
                  $img_path = ROOT . '/uploads/posts/' . $i_data[0];
                  // Проверяем, есть ли такой файл на сервере. Если нет, то берём следующий элемент из массива и передаём функции
                  if(!deleteImage($img_path)) deleteImage(ROOT . '/uploads/posts/' . $i_data[1]);
               }
               break;
            
            case 'lines':
               // Вытаскиваем все изображения из поля
               preg_match_all('/\S+\/uploads\/posts\/(\d{4}-\d{2})\/(.*?\.jpg|jepg|png|webp|gif|bmp)/', $xf[1], $links);
               // Перебераем массив с ссылками
               for ($i = 0, $max = count($links[0]); $i < $max; $i++) {
                  // Передаём ссылку функции
                  deleteImage(realpath(ROOT . "/uploads/posts/{$links[1][$i]}/{$links[2][$i]}"));
               }
               break;
            
            case 'formated_lines':
               // Вытаскиваем все изображения из поля
               preg_match_all('/<a\s+(?:[^>]*?\s+)?href=(["\'])(.*?)\1/', $xf[1], $links);
               // Перебераем массив с ссылками
               foreach ($links[2] as $link) {
                  // Вытаскиваем нужные данные из ссылки и передаём её в функцию
                  preg_match('/\S+\/uploads\/posts\/(\d{4}-\d{2})\/(.*?\.jpg|jepg|png|webp|gif|bmp)/', $link, $link_array);
                  deleteImage(realpath(ROOT . "/uploads/posts/{$link_array[1]}/{$link_array[2]}" ));
               }
               break;
         }
         
         
      }
   }
}
// Прощаемся с подключением бд
$db->free();
// Выводим статистику, сколько файлов удалено и каждое изображение на новой строке с размеров файла
echo "Удалено <b>{$files}</b> файлов.<br><b>Файлы</b>:<br><br>";
foreach ($pictures as $pic => $size) echo "Изображение {$pic} ({$size}) удалено!<br>";

PHP:
// Название доп. поля
$xf_name = 'НАЗВАНИЕ ПОЛЯ';

// Выбираем тип доп. поля:
//  - gallery - если поле тип поля поддерживает загрузку изображений
//  - lines - если ссылки в поле прописаны как http://site.ru/uploads/posts/2022-01/изображение.jpg
//  - formated_lines - форматированые ссылки, которые вставляются как [thumb]http://site.ru/uploads/posts/2022-01/изображение.jpg[/thumb]
$xf_type = 'gallery';
Эти данные нужно изменить
 
Последнее редактирование:
PHP:
<?php
// Прописываем константы, чтобы скрипты DLE завелись
define('DATALIFEENGINE', true);
define('ROOT', __DIR__);

// Подключаем классы и данные к бд
include_once ROOT . '/engine/classes/mysql.php';
include_once ROOT . '/engine/data/dbconfig.php';

// Делаем выборку, выбираем только доп. поля
$sql_select = 'SELECT xfields FROM dle_post ORDER by id ASC;';
$db->query($sql_select);

// Подсчитываем файлы
$files = 0;

// Создаём массив с удалёнными файлами
$pictures = [];

// Название доп. поля
$xf_name = 'НАЗВАНИЕ ПОЛЯ';

// Выбираем тип доп. поля:
//  - gallery - если поле тип поля поддерживает загрузку изображений
//  - lines - если ссылки в поле прописаны как http://site.ru/uploads/posts/2022-01/изображение.jpg
//  - formated_lines - форматированые ссылки, которые вставляются как [thumb]http://site.ru/uploads/posts/2022-01/изображение.jpg[/thumb]
$xf_type = 'gallery';

/**
* Функция по удалению изображений
*
* @param $image
* @return bool
*/
function deleteImage($image) {
    global $files, $pictures;
    // Разбираем изображение на пути
    $path_info = pathinfo($image);
  
    // Смотрим в какой папке лежит изображения и сохраняем путь в новую переменную
    $img_dir = dirname($image);
  
    // Если у файла нет типа, то возвращаем отризательный ответ
    if (!isset($path_info['extension'])) return false;
  
    // Путь до уменьшенной копии
    $thumb_path = $img_dir . '/thumb/' . $path_info['basename'];
    // Путь до средней копии
    $medium_path = $img_dir . '/medium/' . $path_info['basename'];
  
    // Проверяем, есть ли уменьшенная копия
    if (file_exists($thumb_path)) {
        // Если есть, то вносим в массив данных по удалённым изображений
        $pictures[$thumb_path] = 'Уменьшенная копия';
        // Пытаемся удалить файл с сервера
        @unlink($thumb_path);
        // Увеличиваем счётчик удалённых файлов
        $files++;
    }
  
    // Проверяем, есть ли средняя копия
    if (file_exists($medium_path)) {
        // Если есть, то вносим в массив данных по удалённым изображений
        $pictures[$medium_path] = 'Средняя копия';
        // Пытаемся удалить файл с сервера
        @unlink($medium_path);
        // Увеличиваем счётчик удалённых файлов
        $files++;
    }
  
    return true;
}

// Проверяем каждую новость
while($row = $db->get_row()) {
    // Распиливаем поля
    $xfs = explode('||', $row['xfields']);
    // Проверяем каждое поле
    foreach($xfs as $x) {
        // Снова распил
        $xf = explode('|', $x);
        // Проверям на нужное поле, название поля вписываем на латинице
        if($xf[0] === $xf_name) {
          
            switch($xf_type) {
                case 'gallery':
                    // Пилим массив данных о изображениях и создаём новый, если в поле несколько изображений
                    $image_data = explode(',', $xf[1]);
                    // Разбираем каждое изображение в массиве изображений
                    foreach ($image_data as $img) {
                        // Пилим данные об изображении в новый массив
                        $i_data = explode('&#124;', $img);
                        // Создаём путь до картинки
                        $img_path = ROOT . '/uploads/posts/' . $i_data[0];
                        // Проверяем, есть ли такой файл на сервере. Если нет, то берём следующий элемент из массива и передаём функции
                        if(!deleteImage($img_path)) deleteImage(ROOT . '/uploads/posts/' . $i_data[1]);
                    }
                    break;
              
                case 'lines':
                    // Вытаскиваем все изображения из поля
                    preg_match_all('/\S+\/uploads\/posts\/(\d{4}-\d{2})\/(.*?\.jpg|jepg|png|webp|gif|bmp)/', $xf[1], $links);
                    // Перебераем массив с ссылками
                    for ($i = 0, $max = count($links[0]); $i < $max; $i++) {
                        // Передаём ссылку функции
                        deleteImage(realpath(ROOT . "/uploads/posts/{$links[1][$i]}/{$links[2][$i]}"));
                    }
                    break;
              
                case 'formated_lines':
                    // Вытаскиваем все изображения из поля
                    preg_match_all('/<a\s+(?:[^>]*?\s+)?href=(["\'])(.*?)\1/', $xf[1], $links);
                    // Перебераем массив с ссылками
                    foreach ($links[2] as $link) {
                        // Вытаскиваем нужные данные из ссылки и передаём её в функцию
                        preg_match('/\S+\/uploads\/posts\/(\d{4}-\d{2})\/(.*?\.jpg|jepg|png|webp|gif|bmp)/', $link, $link_array);
                        deleteImage(realpath(ROOT . "/uploads/posts/{$link_array[1]}/{$link_array[2]}" ));
                    }
                    break;
            }
          
          
        }
    }
}
// Прощаемся с подключением бд
$db->free();
// Выводим статистику, сколько файлов удалено и каждое изображение на новой строке с размеров файла
echo "Удалено <b>{$files}</b> файлов.<br><b>Файлы</b>:<br><br>";
foreach ($pictures as $pic => $size) echo "Изображение {$pic} ({$size}) удалено!<br>";

PHP:
// Название доп. поля
$xf_name = 'НАЗВАНИЕ ПОЛЯ';

// Выбираем тип доп. поля:
//  - gallery - если поле тип поля поддерживает загрузку изображений
//  - lines - если ссылки в поле прописаны как http://site.ru/uploads/posts/2022-01/изображение.jpg
//  - formated_lines - форматированые ссылки, которые вставляются как [thumb]http://site.ru/uploads/posts/2022-01/изображение.jpg[/thumb]
$xf_type = 'gallery';
Эти данные нужно изменить
Все равно не удаляет. Пробовал все три варианта, gallery - быстро перезагружается страница, lines и formated_lines - думает какое то время и результат, удалено ноль.проверял на двух сайтах
 
PHP:
<?php
// Прописываем константы, чтобы скрипты DLE завелись
define('DATALIFEENGINE', true);
define('ROOT', __DIR__);

// Подключаем классы и данные к бд
include_once ROOT . '/engine/classes/mysql.php';
include_once ROOT . '/engine/data/dbconfig.php';

// Делаем выборку, выбираем только доп. поля
$sql_select = 'SELECT xfields FROM dle_post ORDER by id ASC;';
$db->query($sql_select);

// Подсчитываем файлы
$files = 0;

// Создаём массив с удалёнными файлами
$pictures = [];

// Название доп. поля
$xf_name = 'НАЗВАНИЕ ПОЛЯ';

// Выбираем тип доп. поля:
//  - gallery - если поле тип поля поддерживает загрузку изображений
//  - lines - если ссылки в поле прописаны как http://site.ru/uploads/posts/2022-01/изображение.jpg
//  - formated_lines - форматированые ссылки, которые вставляются как [thumb]http://site.ru/uploads/posts/2022-01/изображение.jpg[/thumb]
$xf_type = 'gallery';

/**
* Функция по удалению изображений
*
* @param $image
* @return bool
*/
function deleteImage($image) {
    global $files, $pictures;
    // Разбираем изображение на пути
    $path_info = pathinfo($image);
   
    // Смотрим в какой папке лежит изображения и сохраняем путь в новую переменную
    $img_dir = dirname($image);
   
    // Если у файла нет типа, то возвращаем отризательный ответ
    if (!isset($path_info['extension'])) return false;
   
    // Путь до уменьшенной копии
    $thumb_path = $img_dir . '/thumb/' . $path_info['basename'];
    // Путь до средней копии
    $medium_path = $img_dir . '/medium/' . $path_info['basename'];
   
    // Проверяем, есть ли уменьшенная копия
    if (file_exists($thumb_path)) {
        // Если есть, то вносим в массив данных по удалённым изображений
        $pictures[$thumb_path] = 'Уменьшенная копия';
        // Пытаемся удалить файл с сервера
        @unlink($thumb_path);
        // Увеличиваем счётчик удалённых файлов
        $files++;
    }
   
    // Проверяем, есть ли средняя копия
    if (file_exists($medium_path)) {
        // Если есть, то вносим в массив данных по удалённым изображений
        $pictures[$medium_path] = 'Средняя копия';
        // Пытаемся удалить файл с сервера
        @unlink($medium_path);
        // Увеличиваем счётчик удалённых файлов
        $files++;
    }
   
    return true;
}

// Проверяем каждую новость
while($row = $db->get_row()) {
    // Распиливаем поля
    $xfs = explode('||', $row['xfields']);
    // Проверяем каждое поле
    foreach($xfs as $x) {
        // Снова распил
        $xf = explode('|', $x);
        // Проверям на нужное поле, название поля вписываем на латинице
        if($xf[0] === $xf_name) {
           
            switch($xf_type) {
                case 'gallery':
                    // Пилим массив данных о изображениях и создаём новый, если в поле несколько изображений
                    $image_data = explode(',', $xf[1]);
                    // Разбираем каждое изображение в массиве изображений
                    foreach ($image_data as $img) {
                        // Пилим данные об изображении в новый массив
                        $i_data = explode('&#124;', $img);
                        // Создаём путь до картинки
                        $img_path = ROOT . '/uploads/posts/' . $i_data[0];
                        // Проверяем, есть ли такой файл на сервере. Если нет, то берём следующий элемент из массива и передаём функции
                        if(!deleteImage($img_path)) deleteImage(ROOT . '/uploads/posts/' . $i_data[1]);
                    }
                    break;
               
                case 'lines':
                    // Вытаскиваем все изображения из поля
                    preg_match_all('/\S+\/uploads\/posts\/(\d{4}-\d{2})\/(.*?\.jpg|jepg|png|webp|gif|bmp)/', $xf[1], $links);
                    // Перебераем массив с ссылками
                    for ($i = 0, $max = count($links[0]); $i < $max; $i++) {
                        // Передаём ссылку функции
                        deleteImage(realpath(ROOT . "/uploads/posts/{$links[1][$i]}/{$links[2][$i]}"));
                    }
                    break;
               
                case 'formated_lines':
                    // Вытаскиваем все изображения из поля
                    preg_match_all('/<a\s+(?:[^>]*?\s+)?href=(["\'])(.*?)\1/', $xf[1], $links);
                    // Перебераем массив с ссылками
                    foreach ($links[2] as $link) {
                        // Вытаскиваем нужные данные из ссылки и передаём её в функцию
                        preg_match('/\S+\/uploads\/posts\/(\d{4}-\d{2})\/(.*?\.jpg|jepg|png|webp|gif|bmp)/', $link, $link_array);
                        deleteImage(realpath(ROOT . "/uploads/posts/{$link_array[1]}/{$link_array[2]}" ));
                    }
                    break;
            }
           
           
        }
    }
}
// Прощаемся с подключением бд
$db->free();
// Выводим статистику, сколько файлов удалено и каждое изображение на новой строке с размеров файла
echo "Удалено <b>{$files}</b> файлов.<br><b>Файлы</b>:<br><br>";
foreach ($pictures as $pic => $size) echo "Изображение {$pic} ({$size}) удалено!<br>";

PHP:
// Название доп. поля
$xf_name = 'НАЗВАНИЕ ПОЛЯ';

// Выбираем тип доп. поля:
//  - gallery - если поле тип поля поддерживает загрузку изображений
//  - lines - если ссылки в поле прописаны как http://site.ru/uploads/posts/2022-01/изображение.jpg
//  - formated_lines - форматированые ссылки, которые вставляются как [thumb]http://site.ru/uploads/posts/2022-01/изображение.jpg[/thumb]
$xf_type = 'gallery';
Эти данные нужно изменить
Если хотите, могу дать доступ к ftp и сайту. Что бы сами посмотрели.
 
забыл добавить функционал по удалению самого изображения 😂 обновил пост выше
1643619920847
 

Пользователи, просматривающие данную тему

Верх