Удаление старых аватарок Office
Недавно выяснилось, что в платном компоненте Office была недоработка, которая мешала удалению старых аватарок пользователей при редактировании профиля.
То есть, вы залили фотку, потом её удалили или заменили — а старая осталась на сервере. Ошибку я успешно поправил, обновление выпустил, но встал вопрос — а что делать с этими старыми аватарками? Они же место занимают, да и вообще, нехорошо как-то.
Поэтому я написал небольшой скрипт для удаления всех картинок из директории аватарок, которых нет в профилях пользователей. Заодно это может быть неплохим примером работы с файлами.
Скрипт опробован на этом сайте (modx.pro), проблем не было. Но всё равно: внимание, использовать скрипт только после полного бэкапа сайта! Как и любая операция с удалением файлов, этот скрипт потенциально опасен!
Я вас предупредил, претензии не принимаются.
Файл сохранить под любым именем в корневой директории сайта и запустить снаружи.
То есть, вы залили фотку, потом её удалили или заменили — а старая осталась на сервере. Ошибку я успешно поправил, обновление выпустил, но встал вопрос — а что делать с этими старыми аватарками? Они же место занимают, да и вообще, нехорошо как-то.
Поэтому я написал небольшой скрипт для удаления всех картинок из директории аватарок, которых нет в профилях пользователей. Заодно это может быть неплохим примером работы с файлами.
Скрипт опробован на этом сайте (modx.pro), проблем не было. Но всё равно: внимание, использовать скрипт только после полного бэкапа сайта! Как и любая операция с удалением файлов, этот скрипт потенциально опасен!
Я вас предупредил, претензии не принимаются.
<?php
// Подключаем MODX
define('MODX_API_MODE', true);
require 'index.php';
// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_FATAL);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
// Ваша директория с аватарками как она указана в OfficeProfile
// Здесь - значение по умолчанию
$path = '/assets/images/users/';
// Выбираем только картинки, путь которых начинаются с директории аватарок
$q = $modx->newQuery('modUserProfile', array('photo:LIKE' => $path . '%'));
$q->select('photo');
// Наш массив всех аватарок
$photos = array();
if ($q->prepare() && $q->stmt->execute()) {
while ($photo = $q->stmt->fetchColumn()) {
// Удаляем директорию из пути, чтобы осталось только имя файла
$photos[] = str_replace($path, '', $photo);
}
}
// Полный путь к директории от корня сервера
$path = rtrim(MODX_BASE_PATH, '/') . $path;
// Получаем список всех файлов
$files = scandir($path);
foreach ($files as $file) {
// Скрытый файл или выход наверх - пропускаем
if ($file[0] == '.') {continue;}
// Если файла нет в массиве аватарок - удаляем
elseif (!in_array($file, $photos)) {
unlink($path . $file);
// И печатаем его имя
echo "<p>$file</p>";
}
}
Файл сохранить под любым именем в корневой директории сайта и запустить снаружи.