Как удалить ссылки на несуществующие изображения из БД DLE

12 3
O
На сайте с 18.05.2013
Offline
23
3171

Здравствуйте! Есть обычный варезник на DLE, новостей около 80 к, ранее картинки заливались на сайт и так получилось, что старые новости остались без картинок в папке Uploads (тупо стёрты), а в БД ссылки на них существуют и сервер при каждом обращении пишет в лог ошибки..

Задача: Как пакетно удалить из БД ДЛЕ ссылки на несуществующие файлы (картинки) помесячно, как расположены папки в /uploads/posts/2011-06 например..

Как правильно прописать запрос в БД на удаление?

Посты сами должны остаться...

Заранее спасибо за помошь!

speed-core
На сайте с 30.03.2014
Offline
33
#1

Вытаскиваем все файлы:

$query=mysql_query("select * from table_images");
//Начинаем проверку всех файлов
while ($array=mysql_fetch_array($query)) {
//Путь к файлу
$url=$array['url'];
//Проверка на существование файла
if (!file_exists ($url)) {
//Если нашли не первый не существующий фаил
if (isset($perviy)) {
$id_del.=','.$array['id'];
} else {
$id_del=$array['id'];
}
}
}
//Если нашли не существующие файлы
if (isset($id_del)) {
if (mysql_query("delete from table_images where id in (".$id_del.")")) {
echo "Все гуд удалилось";
} else {
echo "Ошибка при удалении";
}
} else {
echo "Нет записей для удаления";
}

где table_images - таблица с изображениями

$url=$array['url']; - вытаскиваем с таблици инфу где должен быть сохранен фаил "папка и название файла"

$array['id'] - это ид элемента (файла) если надо удалить из бд его.

В общем все что нужно, это знать структуру таблиц.

HOST-PROTECTION (/ru/forum/848747), профессиональный web хостинг, гарантия стабильности, защита от DDoS.
O
На сайте с 18.05.2013
Offline
23
#2

Как это применить? Запрос в БД? Или файл РНР с этими данными запустить? Мож я и торможу)))

---------- Добавлено 03.04.2014 в 17:22 ----------

speed-core:
Вытаскиваем все файлы:


где table_images - таблица с изображениями
$url=$array['url']; - вытаскиваем с таблици инфу где должен быть сохранен фаил "папка и название файла"
$array['id'] - это ид элемента (файла) если надо удалить из бд его.

В общем все что нужно, это знать структуру таблиц.

Как применить практически, куда вписать, откуда запустить...??

speed-core
На сайте с 30.03.2014
Offline
33
#3

Это php код.

Я не знаю как выглядит у Вас БД. Поэтому писал названия таблиц и полей от себя. Откройте в phpmyadmin таблицу которая содержит записи с изображениями и сообщите мне инфу или скрин(тогда отредактирую код)

O
На сайте с 18.05.2013
Offline
23
#4
speed-core:
Это php код.
Я не знаю как выглядит у Вас БД. Поэтому писал названия таблиц и полей от себя. Откройте в phpmyadmin таблицу которая содержит записи с изображениями и сообщите мне инфу или скрин(тогда отредактирую код)

Обычный DLE 10 всё стандартно

СКРИН http://shot.qip.ru/00jUa7-6XULWFc05/

---------- Добавлено 03.04.2014 в 17:34 ----------

Меня интересует как применить Ваш код РНР как запустить его..

---------- Добавлено 03.04.2014 в 17:35 ----------

Создал файл, вписал код , запустил, ничё не просходит, сам код отбражается и всё

speed-core
На сайте с 30.03.2014
Offline
33
#5
$query=mysql_query("select * from dle_images");
//Начинаем проверку всех файлов
while ($array=mysql_fetch_array($query)) {
//Путь к файлу
$url=$array['images'];
//Проверка на существование файла
if (!file_exists ($url)) {
//Если нашли не первый не существующий фаил
if (isset($id_del)) {
$id_del.=','.$array['id'];
} else {
$id_del=$array['id'];
}
}
}
//Если нашли не существующие файлы
if (isset($id_del)) {
if (mysql_query("delete from dle_images where id in (".$id_del.")")) {
echo "Все гуд удалилось";
} else {
echo "Ошибка при удалении";
}
} else {
echo "Нет записей для удаления";
}

Готово, незабываем подключиться к самой БД


$ip='localhost';
$user='root';
$password='root';
$namedb='название бд';

$connect=mysql_connect($ip,$user,$password);
mysql_select_db($namedb,$connect);
и на всякий
mysql_query('SET NAMES utf8;',$connect);

учтите что путь $array['images'] - относительно вашего нахождения.

если файлы находятся дальше например: /uploads/posts/ ****

то меняем строку

$url=$array['images'];

на

$url='/uploads/posts/'.$array['images'];
[Удален]
#6
if (mysql_query("delete from table_images where id in (".$id_del.")")) {

вместо table_images - dle_images :)

O
На сайте с 18.05.2013
Offline
23
#7
speed-core:
Это php код.
Я не знаю как выглядит у Вас БД. Поэтому писал названия таблиц и полей от себя. Откройте в phpmyadmin таблицу которая содержит записи с изображениями и сообщите мне инфу или скрин(тогда отредактирую код)

Спасибо, теперь более менее понятно, как сделаю, сообщу результат..

speed-core
На сайте с 30.03.2014
Offline
33
#8

Вот пример кода - Он берет с бД все изображения проверяет их существование, и в случаи если фаил был не обнаружен - удалит его. "Загружаем в корень - меняем значение БД"

На всякий сделайте бейкап данной таблици - так как если путь до файла не верный "от корня сайта", то он его удалит.

zip dle_code.zip
speed-core
На сайте с 30.03.2014
Offline
33
#9

JagdTiger

ага спасибо, совсем заработался )))

---------- Добавлено 03.04.2014 в 15:55 ----------

Сори, еще касяк

if (isset($perviy)) {

на

if (isset($id_del)) {
O
На сайте с 18.05.2013
Offline
23
#10

А если папки с изображениями в таком виде

в параметре

$url='/uploads/posts/'.$array['images'];
ничё менять не надо типа
$url='/uploads/posts/2011-07/'.$array['images'];
??
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий