Посты по тегу: WordPress

Добавляем memcached в стэк Wordpress by Bitnami

wordpress

Понадобилось мне тут в проекте добавить поддержку Memcached в Wordpress, развернутый на Amazon. Кто не в курсе, то там используется предустановка от Bitnami. Поскольку в этом стэке используется не системный PHP, а кастомный, то и добавить туда модуль PHP не тривиальная задача. При попытке использовать доку от Bitnami я получил кучу ошибок и перерыл кучу форумов, чтоб их решить. В результате все мои изыскания вылились в простой скрипт, который все ставит и перезапускает php-fpm.

export LIBMEMCACHED_VERSION='1.0.18'
export PHPMEMCACHED_VERSION='2.2.0'

# Install dependencies

sudo apt update
sudo apt install -y memcached
sudo apt install -y build-essential libtool autoconf unzip wget git pkg-config

# Create folder

sudo mkdir /opt/bitnami/common
sudo chmod 777 /opt/bitnami/common/

# Setup libmemcached

cd /tmp
wget https://launchpad.net/libmemcached/1.0/${LIBMEMCACHED_VERSION}/+download/libmemcached-${LIBMEMCACHED_VERSION}.tar.gz
tar -zxf libmemcached-${LIBMEMCACHED_VERSION}.tar.gz
cd libmemcached-${LIBMEMCACHED_VERSION}
./configure --prefix=/opt/bitnami/common
make
sudo make install

# Setup php extension

cd /tmp
export PHP_AUTOCONF=/usr/bin/autoconf
export PHP_PREFIX=/opt/bitnami/php
wget http://pecl.php.net/get/memcached-${PHPMEMCACHED_VERSION}.tgz
tar -xzf memcached-${PHPMEMCACHED_VERSION}.tgz
cd memcached-${PHPMEMCACHED_VERSION}
/opt/bitnami/php/bin/phpize
./configure --enable-memcached --with-zlib-dir=/opt/bitnami/common --with-libmemcached-dir=/opt/bitnami/common --with-php-config=/opt/bitnami/php/bin/php-config --disable-memcached-sasl
make
sudo make install
echo 'extension=memcached.so' | sudo tee -a /opt/bitnami/php/etc/php.ini

# Restart php-fpm

sudo /opt/bitnami/ctlscript.sh restart php-fpm

PHP7 и Wordpress W3 Total Cache plugin

Вернулся я на Wordpress и сразу на PHP7. По старой привычке поставил W3 Total Cache, но он стал выдавать Warning внизу каждой страницы:

Warning:  Parameter 1 to W3_Plugin_TotalCache::ob_callback() expected to be a reference, value given in /var/www/wp-includes/functions.php on line 3297

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

curl https://gist.githubusercontent.com/DmitriyLyalyuev/9fd64536f4bab4c02f83/raw/35a578ae5ecf71a480d3fdf58cfb27dec6b8bf86/w3tc-php7.patch | patch -p0

Чтоб не быть обвиненным, что патч что-то ломает (да, Тим? :) ), выкладываю его в "сыром" же виде:

--- wp-content/plugins/w3-total-cache/lib/W3/Plugin/TotalCache.php  2015-11-20 11:19:10.595861000 +0300
+++ wp-content/plugins/w3-total-cache/lib/W3/Plugin/TotalCache.php  2015-11-20 11:18:09.859861000 +0300
@@ -509,7 +509,7 @@
      * @param string $buffer
      * @return string
      */
-    function ob_callback(&$buffer) {
+    function ob_callback($buffer) {
         global $wpdb;

         if ($buffer != '') {