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

Запретить cache (кэширование)


boomfox

Recommended Posts

Так никто не спорит, я изначально спрашивал как его отрубить вовсе. Что же делать с фотками? Например у меня три поддомена: 111, 222, 333 пусть главный сайт стоит на 111 (от сюда загружаю фотки и добавляю товар) получается что на домене 111 все ок, ставятся фотки ..../111/image/... а вот в остальных все равно ставится ..../222/image/.... и так дальше, даже после изменения в config.php и admin/config.php я там вместо ..../222/image... поставил 111.

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


В 1.х это делается легко, а в 0.х прийдётся изголяться

Создай поддомен типа images.domain.tld и папке этого поддомена сделай папку для изображений

Почему отдельный поддомен, а не один из существующих - объяснять лень, но так лучше.

В конфигах константе DIR_IMAGE присвой путь в папку с изображениями на созданном поддомене.

В конфиге админки константам HTTP_IMAGE и HTTPS_IMAGE пропиши созданный поддомен

define('HTTP_IMAGE', 'http://images.domain.tld/image/');
define('HTTPS_IMAGE', 'http://images.domain.tld/image/');

Потом в корневом index.php ищеш такие строки

define('HTTP_SERVER', $config->get('config_url'));
define('HTTP_IMAGE', HTTP_SERVER . 'image/');

if ($config->get('config_ssl')) {
	define('HTTPS_SERVER', 'https://' . substr($config->get('config_url'), 7));
	define('HTTPS_IMAGE', HTTPS_SERVER . 'image/');
} else {
	define('HTTPS_SERVER', HTTP_SERVER);
	define('HTTPS_IMAGE', HTTP_IMAGE);
}
изменяеш константы HTTP_IMAGE и HTTPS_IMAGE так же как в конфиге админки, что бы вот так получилось:

define('HTTP_SERVER', $config->get('config_url'));
define('HTTP_IMAGE', 'http://images.domain.tld/image/');

if ($config->get('config_ssl')) {
	define('HTTPS_SERVER', 'https://' . substr($config->get('config_url'), 7));
	define('HTTPS_IMAGE', 'http://images.domain.tld/image/');
} else {
	define('HTTPS_SERVER', HTTP_SERVER);
	define('HTTPS_IMAGE', HTTP_IMAGE);
}
У себя не проверял, но вроде не ошибся и должно работать...
Надіслати
Поділитися на інших сайтах

Кстати о птичках...

Попробуй на всех сайтах константе DIR_CACHE прописать путь в папку кеша какого-то одного сайта... должно получиться.

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

Я думал об этом, но получается что все буду записывать информацию в одно место и из него тоже будут брать, а что произойдет, если я размещу товар только на 4 магазина из 25-ти )) скорее всего все сайты будут его отображать.

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


Я думал об этом, но получается что все буду записывать информацию в одно место и из него тоже будут брать, а что произойдет, если я размещу товар только на 4 магазина из 25-ти )) скорее всего все сайты будут его отображать.

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

Вот чтение кеша

$product_data = $this->cache->get('product.latest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $limit);
а вот запись

$this->cache->set('product.latest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $limit, $product_data);
как видиш в ключе кеша присутствует $this->config->get('config_store_id'),

а когда удаляется кеш - $this->config->get('config_store_id') не учитывается

$this->cache->delete('product');
Надіслати
Поділитися на інших сайтах

Ты с кучей сайтов заморачиваешся для раскидывания товаров одного производителя или одной категории по разным доменам, а на морде основного сайта и в модулях используются товары со всех поддоменов?

Если я прав и с изображениями всё получится - то имеет смысл на поддомене для изображений включить кеширование на стороне браузера....

В корне поддомена для изображений создай .htaccess с такими строками

<IfModule mod_expires.c>
	ExpiresActive On
	## Кэшировать браузером все файлы в течении двух недель (в секундах).
	ExpiresDefault A1209600
</IfModule>
Получится пародия на CDN.

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

Параллельная загрузка будет за счет того что изображения на другом домене.

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

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

Так что лучше сделать так:

В файле system/library/cache.php ищеш строки которые начинаются с

public function ......
таких строк там 4

После каждой найденной строки добавь строку

return;
всё... раз уж кеш не используем - то и файловую систему дергать смысла нет...

Если захочеш включить кеш - то гораздо проще восстановить один файл, а не 24.

да, так лучше.

мои не оптимальные советы привели к справедливой критике и к оптимальному решению. думаю это главное

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

Да... уж... лёгких путей не ищем.

freelancer я поражен твоим мастерством всё ставить с ног на голову... Этож надо было додуматься исправить 24 файла....

boomfox неужели так критично что-бы новые товары появлялись на сайтах моментально?

Время жизни кеша - 1 час, и новые товары появятся во всех магазинах не позднее чем через час.

Или у тебя посещаемость такая что за час теряеш продажи?

Если 1 час всё таки очень долго - уменьш время жизни кеша до 10-15 минут.

В файле system/library/cache.php найди строку

private $expire = 3600;
вместо 3600 напиши 900 или 600 (это время жизни кеша в секундах)

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

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

Так что лучше сделать так:

В файле system/library/cache.php ищеш строки которые начинаются с

public function ......
таких строк там 4

После каждой найденной строки добавь строку

return;
всё... раз уж кеш не используем - то и файловую систему дергать смысла нет...

Если захочеш включить кеш - то гораздо проще восстановить один файл, а не 24.

Как правильно прописать return; покажите пример ))

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


А так?

<?php
final class Cache { 
	private $expire = 3600; 

  	public function __construct() {
		$files = glob(DIR_CACHE . 'cache.*');
		
		if ($files) {
			foreach ($files as $file) {
				$time = substr(strrchr($file, '.'), 1);

      			if ($time < time()) {
					if (file_exists($file)) {
						unlink($file);
					}
      			}
    		}
		}
  	}

	public function get($key) {
		$files = glob(DIR_CACHE . 'cache.' . $key . '.*');
		
		if ($files) {
    		foreach ($files as $file) {
      			$handle = fopen($file, 'r');
      			$cache = fread($handle, filesize($file));
	  
      			fclose($handle);

	      		//return unserialize($cache);
			return "";
   		 	}
		}
  	}

  	public function set($key, $value) {
    	$this->delete($key);
		
		$file = DIR_CACHE . 'cache.' . $key . '.' . (time() + $this->expire);
    	
		$handle = fopen($file, 'w');

    	fwrite($handle, serialize($value));
		
    	fclose($handle);
  	}
	
  	public function delete($key) {
		$files = glob(DIR_CACHE . 'cache.' . $key . '.*');
		
		if ($files) {
    		foreach ($files as $file) {
      			if (file_exists($file)) {
					unlink($file);
				}
    		}
		}
  	}
}
?>
Надіслати
Поділитися на інших сайтах


<?php

final class Cache { 

        private $expire = 3600; 



        public function __construct() {

                return; 

                $files = glob(DIR_CACHE . 'cache.*');

                

                if ($files) {

                        foreach ($files as $file) {

                                $time = substr(strrchr($file, '.'), 1);



                        if ($time < time()) {

                                        if (file_exists($file)) {

                                                unlink($file);

                                        }

                        }

                }

                }

        }



        public function get($key) {

                return;

            	$files = glob(DIR_CACHE . 'cache.' . $key . '.*');

                

                if ($files) {

                foreach ($files as $file) {

                        $handle = fopen($file, 'r');

                        $cache = fread($handle, filesize($file));

          

                        fclose($handle);



                        //return unserialize($cache);

                        return "";

                        }

                }

        }



        public function set($key, $value) {

                return; 

            	$this->delete($key);

                

                $file = DIR_CACHE . 'cache.' . $key . '.' . (time() + $this->expire);

        

                $handle = fopen($file, 'w');



            	fwrite($handle, serialize($value));

                

            	fclose($handle);

        }

        

        public function delete($key) {

                return; 

                $files = glob(DIR_CACHE . 'cache.' . $key . '.*');

                

                if ($files) {

                foreach ($files as $file) {

                        if (file_exists($file)) {

                                        unlink($file);

                                }

                }

                }

        }

}

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

Это равносильно $expire = 0;

Будет производится полный цикл всех операций с ФС, хотя заранее известно что результаты нас не интересуют.

<?php
final class Cache { 
  public function get() {}
  public function set() {}
  public function delete() {}
}
?>
Замени свой файл вот этим
Надіслати
Поділитися на інших сайтах

  • 2 months later...

А как вручную очищать кэш? Потому что делал и $expire = 0; и return добавлял, и удалял вручную файлы из system/cache, но после изменения шаблона по-прежнему приходится ждать минут 5-10, пока не увижу изменения.

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


А как вручную очищать кэш? Потому что делал и $expire = 0; и return добавлял, и удалял вручную файлы из system/cache, но после изменения шаблона по-прежнему приходится ждать минут 5-10, пока не увижу изменения.

в топике описаны решения для кеша базы.

вам же могу посоветовать отключить кеш в браузере

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

возможно, вы имеете ввиду папку system/cache

Мало того, я опрометчиво зачистил ее содержимое (удалил 12 файлов, кроме index) - в итоге, файлы вновь не появились в папке, и уведомления о заказах больше не присылаются на почту ни заказчикам, ни мне!

Объясните дурню, как сделать, чтобы кэш вновь заработал и чтобы уведомления начали отправляться.

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


на счет "уведомлений о заказах" вам стоит 1-е проверить свои настройки и 2-е задать вопрос в соответствующей теме поддержки.

на счет папки system/cache - вы можете вообще из нее все удалить так как это (удаление) на правильность работы скриптов влияния оказывать не должно

и проверьте заодно свои права на папку 777

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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