На днях столкнулся с проблемой. Есть форум на движке Simple Machines Forum (размещен на моём любимом хостинге «Украина»), на котором нужно настроить кеширование при помощи memcache.

К слову сказать, возможность использовать мемкеш (как memcache, так и memcacheD ) на хостинге появилась недавно. Несмотря на то, что услуга находится на стадии беты,  мемкеш работает стабильно и стоит сущие копейки — что-то около двух центов за мегабайт или 68 центов за 32 мегабайта в месяц. 32 «метра» же мемкеша, хватит что называется,  «за глаза» для многих задач. (например, кеш всех страниц этого сайта и поддоменов занимает что-то около 20 МБ памяти).

Но хватит лирики.

В рамках хостинга «Украина» для подключения к мемкешу используется не обычная связка «IP-адрес:порт», а так называемый Unix-socket (юникс-сокет) , который выглядит вот так:

unix:///home/username/.system/memcache/socket

Этот момент в связке с некоторой (да простят меня разработчики этого, без сомнения,  замечательного движка) дубовостью самого SMF в работе с мемкешем, вызвал проблему с подключением. При вводе строки  unix:///home/username/.system/memcache/socket:0 в разделе «Admin» — «Configuration» — «Server Settings» — «Caching» — «Memcache settings» админ-панели форума, в логах начинала генерироваться ошибка вида:

2: memcache_connect() expects parameter 2 to be long, string given

File: /home/remn/test.com/www/Sources/Load.php Line: 2742

Хотя в том же разделе сам СМФ писал красивым зелёным цветом «SMF has detected that your server has Memcached installed.»

Как я не бился над этим вопросом — решение пришло непосредственно с форумов поддержки SMF (очень отзывчивые ребята, спасибо им).

Для подключения memcache нужно в файле /Sources/Load.php найти строку

$memcached = memcache_connect($server[0], empty($server[1]) ? 11211 : $server[1]);

и заменить её на

$memcached = memcache_connect('unix:///home/username/.system/memcache/socket', 0);

(само собой, username нужно заменить на имя Вашего хостинг-аккаунта)

Потом в том же файле найти строку

$memcached = memcache_pconnect($server[0], empty($server[1]) ? 11211 : $server[1]);

и заменить на

$memcached = memcache_pconnect('unix:///home/username/.system/memcache/socket', 0);

(само собой, username нужно заменить на имя Вашего хостинг-аккаунта)

Всё. После этого SMF и мемкеш будут работать долго и счастливо в разы ускоряя работу Вашего форума и разгружая веб-сервер!  🙂