Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Полностью отключить кэширование изображений! 2.3


Recommended Posts

Добрый день!

 

Проблема: Размер папки с "image/catalog" - 1.7 гб, товаров на сайте - 50 000. После того, как закешируются все картинки примерно через месяц работы сайта, размер папки "image/cache" составляет 13гб. По сути, хотелось бы узнать короткий путь, чтобы изображения просто не кешированись, а URL изображения брался с оригинальной папки "image/catalog/"

 

<?php
class ModelToolImage extends Model {
    public function resize($filename, $width, $height) {
        if (!is_file(DIR_IMAGE . $filename)) {
            if (is_file(DIR_IMAGE . 'no_image.jpg')) {
                $filename = 'no_image.jpg';
            } elseif (is_file(DIR_IMAGE . 'no_image.png')) {
                $filename = 'no_image.png';
            } else {
                return;
            }
        }

        $extension = pathinfo($filename, PATHINFO_EXTENSION);

        $image_old = $filename;
        $image_new = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '.' . $extension;

        if (!is_file(DIR_IMAGE . $image_new) || (filectime(DIR_IMAGE . $image_old) > filectime(DIR_IMAGE . $image_new))) {
            list($width_orig, $height_orig, $image_type) = getimagesize(DIR_IMAGE . $image_old);

            if (!in_array($image_type, array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF))) {
                return DIR_IMAGE . $image_old;
            }

            $path = '';

            $directories = explode('/', dirname($image_new));

            foreach ($directories as $directory) {
                $path = $path . '/' . $directory;

                if (!is_dir(DIR_IMAGE . $path)) {
                    @mkdir(DIR_IMAGE . $path, 0777);
                }
            }

            if ($width_orig != $width || $height_orig != $height) {
                $image = new Image(DIR_IMAGE . $image_old);
                $image->resize($width, $height);
                $image->save(DIR_IMAGE . $image_new);
            } else {
                copy(DIR_IMAGE . $image_old, DIR_IMAGE . $image_new);
            }
        }

        $imagepath_parts = explode('/', $image_new);
        $new_image = implode('/', array_map('rawurlencode', $imagepath_parts));

        if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
            return $this->config->get('config_ssl') . 'image/' . $new_image;
        } else {
            return $this->config->get('config_url') . 'image/' . $new_image;
        }
    }
}

Думал пошаманить тут, но в php я ноль.

Надіслати
Поділитися на інших сайтах


13 минут назад, sandrin сказал:

Добрый день!

 

Проблема: Размер папки с "image/catalog" - 1.7 гб, товаров на сайте - 50 000. После того, как закешируются все картинки примерно через месяц работы сайта, размер папки "image/cache" составляет 13гб. По сути, хотелось бы узнать короткий путь, чтобы изображения просто не кешированись, а URL изображения брался с оригинальной папки "image/catalog/"

 


<?php
class ModelToolImage extends Model {
    public function resize($filename, $width, $height) {
        if (!is_file(DIR_IMAGE . $filename)) {
            if (is_file(DIR_IMAGE . 'no_image.jpg')) {
                $filename = 'no_image.jpg';
            } elseif (is_file(DIR_IMAGE . 'no_image.png')) {
                $filename = 'no_image.png';
            } else {
                return;
            }
        }

        $extension = pathinfo($filename, PATHINFO_EXTENSION);

        $image_old = $filename;
        $image_new = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '.' . $extension;

        if (!is_file(DIR_IMAGE . $image_new) || (filectime(DIR_IMAGE . $image_old) > filectime(DIR_IMAGE . $image_new))) {
            list($width_orig, $height_orig, $image_type) = getimagesize(DIR_IMAGE . $image_old);

            if (!in_array($image_type, array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF))) {
                return DIR_IMAGE . $image_old;
            }

            $path = '';

            $directories = explode('/', dirname($image_new));

            foreach ($directories as $directory) {
                $path = $path . '/' . $directory;

                if (!is_dir(DIR_IMAGE . $path)) {
                    @mkdir(DIR_IMAGE . $path, 0777);
                }
            }

            if ($width_orig != $width || $height_orig != $height) {
                $image = new Image(DIR_IMAGE . $image_old);
                $image->resize($width, $height);
                $image->save(DIR_IMAGE . $image_new);
            } else {
                copy(DIR_IMAGE . $image_old, DIR_IMAGE . $image_new);
            }
        }

        $imagepath_parts = explode('/', $image_new);
        $new_image = implode('/', array_map('rawurlencode', $imagepath_parts));

        if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
            return $this->config->get('config_ssl') . 'image/' . $new_image;
        } else {
            return $this->config->get('config_url') . 'image/' . $new_image;
        }
    }
}

Думал пошаманить тут, но в php я ноль.

размер кэша картинок не может увеличиваться (если вы товар не добавляете)

Надіслати
Поділитися на інших сайтах


6 минут назад, KomissarJuve сказал:

размер кэша картинок не может увеличиваться (если вы товар не добавляете)

 

Не добавляя новые товары, и новые картинки, меняем в настройках шаблона размер картинок в категориях всего на 1 пиксель, и кэш растёт на глазах.

Надіслати
Поділитися на інших сайтах

3 минуты назад, mazein сказал:

 

Не добавляя новые товары, и новые картинки, меняем настройках шаблона размер картинок в категориях всего на 1 пиксель, и кэш растёт на глазах.

это так

но у человека

в конце месяца очень большой размер кэша

может с двигом нелады

Надіслати
Поділитися на інших сайтах


1 час назад, sandrin сказал:

По сути, хотелось бы узнать короткий путь, чтобы изображения просто не кешированись, а URL изображения брался с оригинальной папки "image/catalog/

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

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

 

57 минут назад, KomissarJuve сказал:

в конце месяца очень большой размер кэша

13 гб, это еще ничего... бывает и больше

Надіслати
Поділитися на інших сайтах

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

Если это нужно, попробуйте вот так:

<?php
class ModelToolImage extends Model {
    public function resize($filename, $width, $height) {
        if (!is_file(DIR_IMAGE . $filename)) {
            if (is_file(DIR_IMAGE . 'no_image.jpg')) {
                $filename = 'no_image.jpg';
            } elseif (is_file(DIR_IMAGE . 'no_image.png')) {
                $filename = 'no_image.png';
            } else {
                return;
            }
        }
		
        if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
            return $this->config->get('config_ssl') . 'image/' . $filename;
        } else {
            return $this->config->get('config_url') . 'image/' . $filename;
        }
    }
}

 

Надіслати
Поділитися на інших сайтах

1 минуту назад, chukcha сказал:

Скажите, а кому пришло в голову, отресайхенные картинки хранить в cache

ответ очевиден - создателям опенкарта.
Но что об этом говорить, это уже есть и с этим надо как-то жить)

Надіслати
Поділитися на інших сайтах

5 минут назад, Prooksius сказал:

с этим надо как-то жить

Вот и живем, а упомянутый вами пользователь, если придет, скажет - КАКОГО????
Хотя здесь и без него пояснили, что это не кеш.

Надіслати
Поділитися на інших сайтах

3 часа назад, Prooksius сказал:

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

А еще вьі получите негатив от гугла например, за сдвиг макета при загрузке страницьі

Надіслати
Поділитися на інших сайтах


1 минуту назад, Dimasscus сказал:

за сдвиг макета при загрузке страницьі

width и height можно прописать как атрибуты img

Надіслати
Поділитися на інших сайтах

5 минут назад, Dimasscus сказал:

А еще вьі получите негатив от гугла например, за сдвиг макета при загрузке страницьі

Сдвиг макета контролируется стилями и критическим css и никакая картинка его не сдвинет, если все сделано правильно.

Надіслати
Поділитися на інших сайтах


27 минут назад, GetWeb сказал:

Сдвиг макета контролируется стилями и критическим css

Когда применяются стили, а когда применяются атрибуты?

Надіслати
Поділитися на інших сайтах

1 час назад, chukcha сказал:

Когда применяются стили, а когда применяются атрибуты?

Атрибуты должны применяться всегда как значение по умолчанию

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.