admin Опубликовано 12 марта, 2022 Поделиться Опубликовано 12 марта, 2022 Делюсь скриптом простого удаления всех ненужных фото удаленных товаров Когда в 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 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.