Удаление криво загруженных фоток в ms2Gallery
Не нашел готового решения (может плохо искал) и быстро набросал скрипт для Console.
При импорте фоток всё пошло наперекосяк, и я понял свою ошибку только после кривой заливки всех фоток. Пришлось аккуратно откатывать всё назад чтобы не повредить ранее правильно залитые файлы.
Вылаживаю скрипт для себя и для других, кто так же столкнётся с такой проблемой.
Не претендую на единственно правильное решение — был бы очень рад более быстрому и удобному способу, если вы поделитесь им в комментариях!
Скрипт:
2
При импорте фоток всё пошло наперекосяк, и я понял свою ошибку только после кривой заливки всех фоток. Пришлось аккуратно откатывать всё назад чтобы не повредить ранее правильно залитые файлы.
Вылаживаю скрипт для себя и для других, кто так же столкнётся с такой проблемой.
Не претендую на единственно правильное решение — был бы очень рад более быстрому и удобному способу, если вы поделитесь им в комментариях!
Скрипт:
<?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