Удаление старых аватарок Office

Недавно выяснилось, что в платном компоненте Office была недоработка, которая мешала удалению старых аватарок пользователей при редактировании профиля.

То есть, вы залили фотку, потом её удалили или заменили — а старая осталась на сервере. Ошибку я успешно поправил, обновление выпустил, но встал вопрос — а что делать с этими старыми аватарками? Они же место занимают, да и вообще, нехорошо как-то.

Поэтому я написал небольшой скрипт для удаления всех картинок из директории аватарок, которых нет в профилях пользователей. Заодно это может быть неплохим примером работы с файлами.

Скрипт опробован на этом сайте (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>";
	}
}

Файл сохранить под любым именем в корневой директории сайта и запустить снаружи.
Василий Наумкин
21 января 2015, 01:24
modx.pro
4
1 583
+8

Комментарии: 0

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