Перейти к содержанию
  • В связи с блокировкой банка QIWI оплата через сайт не возможна.
    Для оплаты и получения дополнений просьба писать в личные сообщения
    Admin*у
    После оплаты Вам так же будет доступно скачивание дополнений и обновлений на данном форуме

Удаление фото если они не закреплены за товаром - чистка сервера от лишних изображений


Рекомендуемые сообщения

photocopy.png.e7bd6199a009319f9cd27b273483febc.png

Делюсь скриптом простого удаления всех ненужных фото удаленных товаров

Когда в Opencart удаляется товар, фото физически остается на сервере а удаляется лишь в базе сам товар и привязка к файлу.

Чем это плохо?

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

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

Сразу хочу сказать, что фото должны быть в отдельной папке от всех остальных изображений, баннеров, картинок шаблона и т.п. То есть фото полностью отделено от магазина.

Код скрипта можно вставить например в admin/controller/common/header.php в функцию index

echo "<pre>";
		$net = 0;
		$find_files = $this->scan_Dir(DIR_IMAGE . "data"); // здесь указываем директория где есть только фото товаров
		if($find_files){		
			foreach($find_files as $file){
				$image = explode("www/image/", $file);
				
				$query = $this->db->query("SELECT product_id FROM oc_product WHERE image = '".$image[1]."'"); //главное фото
				if(!$query->rows){
					$query_dop = $this->db->query("SELECT * FROM oc_product_image WHERE image = '".$image[1]."'"); //доп фото
					if(!$query_dop->rows){
						//echo $file . "<br>"; //можно раскомментировать строку - отображение файла который удаляется
						unlink($file);
						$net++;
					}					
				}
			}
		}
echo "Всего фото: " . count($find_files) . "<br>";
echo "Удалено: " . $net . "<br>";		
echo "</pre>";

И перед функцией index вставляем функцию сканирования папки:

public function scan_Dir($dir) {
		$dir = str_replace("//", "/", $dir);
		$arrfiles = array();
		if (is_dir($dir)) {
			if ($handle = opendir($dir)) {
				chdir($dir);
				while (false !== ($file = readdir($handle))) {
					if ($file != "." && $file != "..") {
						if (is_dir($file)) {
							$arr = $this->scan_Dir($file);
							foreach ($arr as $value) {
								$arrfiles[] = $dir."/".$value;
							}
						} else {
							$arrfiles[] = $dir."/".$file;
						}
					}
				}
				chdir("../");
			}
			closedir($handle);
		}
		return $arrfiles;
	}

После сохранения - заходим в админку и смотрим на статистику сколько есть файлов и сколько удалено лишних.

В примере поставлен стандартный префикс oc_ для таблиц в Opencart, если у вас другой (смотрите конфиг) поменяйте.

Вообще что бы не копились фото при удалении товара а сразу удалялись рекомендую использовать бесплатный модуль.

delete_images.ocmod.zip

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...