Удаление криво загруженных фоток в ms2Gallery
Не нашел готового решения (может плохо искал) и быстро набросал скрипт для Console.
При импорте фоток всё пошло наперекосяк, и я понял свою ошибку только после кривой заливки всех фоток. Пришлось аккуратно откатывать всё назад чтобы не повредить ранее правильно залитые файлы.
Вылаживаю скрипт для себя и для других, кто так же столкнётся с такой проблемой.
Не претендую на единственно правильное решение — был бы очень рад более быстрому и удобному способу, если вы поделитесь им в комментариях!
Скрипт:
При импорте фоток всё пошло наперекосяк, и я понял свою ошибку только после кривой заливки всех фоток. Пришлось аккуратно откатывать всё назад чтобы не повредить ранее правильно залитые файлы.
Вылаживаю скрипт для себя и для других, кто так же столкнётся с такой проблемой.
Не претендую на единственно правильное решение — был бы очень рад более быстрому и удобному способу, если вы поделитесь им в комментариях!
Скрипт:
<?php
// Выборка всех дочерних ресурсов для parent
$q = $modx->prepare("SELECT * FROM modx_site_content WHERE parent = 19");
$q->execute();
$r = $q->fetchAll(PDO::FETCH_ASSOC);
print "<b>Всего: ".count($r)."</b>
";
// Перебор ресурсов в цикле
foreach($r as $row){
$id = $row['id'];
$status = '';
// Удаление записей о файлах ресурса из базы данных
$q_del = $modx->prepare("DELETE FROM modx_ms2_resource_files WHERE resource_id='$id'");
$q_del->execute();
// Проверка если они действительно удалились
$q2 = $modx->prepare("SELECT * FROM modx_ms2_resource_files WHERE resource_id='$id'");
$q2->execute();
if(count($q2->fetchAll(PDO::FETCH_ASSOC)) > 0) {
$status = "- <span style='color:red'>Не удалено</span>";
} else {
$status = "- <span style='color:green'>Удалено</span>";
}
// Физическое удаление файлов на сервере
$path = $_SERVER['DOCUMENT_ROOT'].'/assets/images/resources/'.$id;
removeDirectory($path);
// Вывод информации на экран
print $row['pagetitle']." ($id) $status
";
}
// Функция рекурсивного удаления папок и файлов
function removeDirectory($dir) {if ($objs = glob($dir."/*")) {foreach($objs as $obj) {is_dir($obj) ? removeDirectory($obj) : unlink($obj);}}rmdir($dir);}
Поблагодарить автора
Отправить деньги
Комментарии: 2
$resourceses = $modx->getCollection('modResource', array('parent' => 19));
echo count($resourceses);
foreach ($resourceses as $req) {
$id = $req->get('id');
$c = $modx->newQuery('msProductFile');
$c->command('delete');
$c->where(array(
'product_id' => $id,
));
$c->prepare();
$c->stmt->execute()
removeDirectory($_SERVER['DOCUMENT_ROOT'].'/assets/images/products/'.$id);
};
// Функция рекурсивного удаления папок и файлов
function removeDirectory($dir) {if ($objs = glob($dir."/*")) {foreach($objs as $obj) {is_dir($obj) ? removeDirectory($obj) : unlink($obj);}}rmdir($dir);}
Спасибо большое. Очень помогли.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.