ProfiPHPProfiPHP
  1. Главная
  2. Поддержка OUR-CMS
  3. Поиск неиспользованных изображений в OUR-CMS

Поиск неиспользованных изображений в OUR-CMS

Представьте ситуацию: вы удалили категорию с большим количеством записей. Но удалится исключительно текстовая сторона, а все изображения, которые использовались в записях категории - продолжают сохранятся загруженными на сервер.

Опишем скрипт, который осуществляет поиск неиспользованных изображений в OUR-CMS.

Для установки скопируйте содержимое архива Unused_images в корень сайта и запустите его:
http://yousite/unused_images.php
Исходный код файла:
<?php
/******************************************/
/*** Поиск неиспользованных изображений ***/
/******************************************/
function get_size($bytes) {
if ($bytes < 1000 * 1024) {
return number_format($bytes / 1024, 2) . " KB";
} elseif ($bytes < 1000 * 1048576) {
return number_format($bytes / 1048576, 2) . " MB";
} elseif ($bytes < 1000 * 1073741824) {
return number_format($bytes / 1073741824, 2) . " GB";
} else {
return number_format($bytes / 1099511627776, 2) . " TB";
}
}
$result = '';

// Массив существующих изображений
$arrayImagesExists = array();

// Ищем все изображения в блогах
$dir = glob($_SERVER['DOCUMENT_ROOT'].'/content/infopagedb/*.dat');
foreach ($dir as $thisName) {
@chmod($thisName, 0644);
$array_filedb = file($thisName);
$count = count($array_filedb);
for ($i = 1; $i < $count; $i++) {
if (trim($array_filedb[$i]) != '') {
$messold = unserialize($array_filedb[$i]);
preg_match_all('/<img[^>]+src="?\'?([^"\']+)"?\'?[^>]*>/i', str_replace(array("|slash|", "|quotes|"), array("\\", "\""), $messold['mess']), $matches);
foreach ($matches[1] as $src) {
if (!in_array(strtolower(parse_url($src, PHP_URL_PATH)), $arrayImagesExists)) {
$arrayImagesExists[] = strtolower(parse_url($src, PHP_URL_PATH));
}
}
preg_match_all('/<img[^>]+src="?\'?([^"\']+)"?\'?[^>]*>/i', str_replace(array("|slash|", "|quotes|"), array("\\", "\""), $messold['extra']), $matches);
foreach ($matches[1] as $src) {
if (!in_array(strtolower(parse_url($src, PHP_URL_PATH)), $arrayImagesExists)) {
$arrayImagesExists[] = strtolower(parse_url($src, PHP_URL_PATH));
}
}
}
}
}
// Ищем все изображения в статических файлах
$dir = glob($_SERVER['DOCUMENT_ROOT'].'/content/pagedb/*.dat');
foreach ($dir as $thisName) {
if ($thisName == $_SERVER['DOCUMENT_ROOT'].'/content/pagedb/404.dat') continue;
@chmod($thisName, 0644);
$fopendb = fopen($thisName, 'r');
flock($fopendb, LOCK_SH);
$data = fread($fopendb, filesize($thisName));
flock($fopendb, LOCK_UN);
fclose($fopendb);
list(, $content) = array_map('trim', explode("<!-- OUR_content -->", $data));
preg_match_all('/<img[^>]+src="?\'?([^"\']+)"?\'?[^>]*>/i', str_replace(array("|slash|", "|quotes|"), array("\\", "\""), $content), $matches);
foreach ($matches[1] as $src) {
if (!in_array(strtolower(parse_url($src, PHP_URL_PATH)), $arrayImagesExists)) {
$arrayImagesExists[] = strtolower(parse_url($src, PHP_URL_PATH));
}
}
}
// Проходим по всем изображениям
function findImages($path) {
global $allSize, $arrayImagesExists, $result, $num;
if ($content_findImages = glob($path.'/*')) {
foreach ($content_findImages as $object) {
if (is_dir($object)) {
findImages($object);
} else {
@chmod($object, 0644);
if (!in_array(strtolower(str_replace($_SERVER['DOCUMENT_ROOT'], '', $object)), $arrayImagesExists)) {
$allSize += filesize($object);
$result .= '
<tr>
<td>'.(!isset($num) ? $num = 1 : ++$num).'</td>
<td>'.str_replace($_SERVER['DOCUMENT_ROOT'], '', $object).'</td>
<td>'.get_size(filesize($object)).'</td>
</tr>';
// unlink($object);
}
}
}
}
}
// Выполняем функцию
findImages($_SERVER['DOCUMENT_ROOT'].'/userfiles/image');
echo '<h1>Поиск неиспользованных изображений</h2>';
if (empty($result)) {
echo 'Нет неиспользованных изображений!';
} else {
echo '
<table border="1">
<tr>
<td><b>№</b></td>
<td><b>Изображение</b></td>
<td><b>Размер</b></td>
</tr>
'.$result.'
<tr>
<td colspan="2">Общий размер</td>
<td>'.get_size($allSize).'</td>
</table>';
}
Если вы хотите удалить неиспользованные изображения, необходимо раскоментировать 80 строку:
// unlink($object);

Добавить комментарий

Имя:
Текст комментария: