Всем привет!
Я вчера полдня игрался с установкой wp-cache на локальную машину, а потом на сервер. И вот решил поделиться опытом.
Локальная машина: Apache/1.3.33 (Win32) PHP/4.4.4 WordPress 2.3.3
Сервер: Apache/2.0.52 (CentOS) PHP/5.2.0 WordPress 2.0.10
Несколько слов о wp-cache. Это плагин который предназначен для кеширования динамических страниц. В настройках можно указывать список скриптов чью выдачу нужно кешировать и время жизни кеша.
Для того чтобы запустить плагин с полпинка нужно:
1. скачать плагин http://wordpress.org/extend/plugins/wp-cache/
2. создать папку wp-content/plugins/wp-cache и скопировать туда содержимое скачанного архива
3. активировать плагин
Это в идеале :). Если что то не получается рекомендую почитать README.txt из того же архива.
В общем не знаю у кого как а у меня это дело с полпинка не запустилось и пришлось искать причину.
На этом форуме я прочитал, что нужно в wp-config.php прописать.
define('WP_CACHE', true);
Прописываем. Когда эта константа установлена в TRUE, тогда движок подхватывает кеширующий скрипт:
// For an advanced caching plugin to use, static because you would only want one
if ( defined('WP_CACHE') )
@include ABSPATH . 'wp-content/advanced-cache.php';
Для того чтобы переадресовать этот вызов на UNIX сервере достаточно создать символьную ссылку:
ln -s wp-content/plugins/wp-cache/wp-cache-phase1.php wp-content/advanced-cache.php
Но как быть если сервер не UNIX или если у нас недостаточно прав для создания символической ссылки? Создаем файл wp-content/advanced-cache.php, который подключает plugins/wp-cache/wp-cache-phase1.php
<?php
require_once(ABSPATH . 'wp-content/plugins/wp-cache/wp-cache-phase1.php');
?>
Точно не помню, но помоему именно в этот момент я увидел ошибку подключения. Проблема была в том что в ABSPATCH были и обратные и прямые слэши. Для того чтобы это поправить я в wp-config.php немного изменил определение константы ABSPATCH:
$dirpath = str_replace('\\','/',dirname(__FILE__).'/');
define('ABSPATH', $dirpath);
Вроде вызов переадресовали, но нехватает конфига. Переименовываем (или копируем) файл wp-content/plugins/wp-cache/wp-cache-config-sample.php в wp-content/wp-cache-config.php.
Все, порядок. Заходим в админку, активируем плагин и переходим на страницу настройки/wp-cache. Она пустая… В файле wp-content/plugins/wp-cache/cache.php есть функция проверки существования символической ссылки – wp_cache_check_link(). Немного меняем код функции:
function wp_cache_check_link() {
global $wp_cache_link, $wp_cache_file;
if (file_exists($wp_cache_link)) {
return true;
}
if ( basename(@readlink($wp_cache_link)) != basename($wp_cache_file)) {
@unlink($wp_cache_link);
if (!@symlink ($wp_cache_file, $wp_cache_link)) {
echo "<code>advanced-cache.php</code> link does not exist<br />";
echo "Create it by executing: <br /><code>ln -s $wp_cache_file $wp_cache_link</code><br /> in your server<br />";
return false;
}
}
return true;
}
Теперь она сначала проверяет существование файла, а потом ссылки. Все. Админка должна заработать. Видим надпись "WP-Cache is Disabled" -> включаем wp-cache "Enable it" (или можно прописать $cache_enabled = true; в wp-content/wp-cache-config.php).
И напоследок ещё несколько условий необходимых для работы плагина:
– необходимо отключить поддержку g-zip сжатия в настройки/чтение
– на Unix серверах должен быть доступ к записи на файл wp-content/wp-cache-config.php (чтобы менять настройки кеширования из админки) и на папку wp-content/cache (сюда записываются все закешированые файлы).
Должно работать. Правда у меня была ещё одна проблема – страницы кешировались, но с кеша не читались, каждый раз генерировались заново. Оказалось что кеш выводиться функцией readfile, которая на сервере была отключена в целях безопасности. Вот этот кусок кода:
if(!@readfile ($cache_file))
return;
Тут используется оператор подавления ошибок, поэтому очень сложно найти причину не зная как работает скрипт. Решается проблема заменой этого кода на:
if (file_exists($cache_file)) {
$content = file_get_contents($cache_file);
echo $content;
} else {
return;
}
Надеюсь эта тема кому то поможет ;).