From 0bb005339c30f65f48b89ab131478fb50f2c3906 Mon Sep 17 00:00:00 2001 From: Dekart Deploy Bot Date: Fri, 17 Jul 2026 18:07:44 +0000 Subject: [PATCH] fix: remove auto-copy memcached drop-in (prevents broken HTML on prod) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dekart_try_install_memcached_dropin() removed — no more auto-copy on plugins_loaded (causes PHP errors if memcached server not running) - Admin notice shows: 'Install manually' when server is reachable, 'Start Memcached server' when extension installed but no connect, 'Install PHP extension' when missing - Plugin action link shows 'install manually' instead of 'Activate' - WP-CLI: wp dekart cache-memcached still works for manual install --- .../mu-plugins/object-cache-bootstrap.php | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/wp-content/mu-plugins/object-cache-bootstrap.php b/wp-content/mu-plugins/object-cache-bootstrap.php index dfd8d07..407b63a 100644 --- a/wp-content/mu-plugins/object-cache-bootstrap.php +++ b/wp-content/mu-plugins/object-cache-bootstrap.php @@ -98,34 +98,18 @@ add_action( 'save_post', 'my_cache_bump_version' ); add_action( 'carbon_fields_post_meta_container_saved', 'my_cache_bump_version' ); // ============================================================ -// 5. АВТОУСТАНОВКА DROP-IN MEMCACHED (для прода) +// 5. АДМИН-НОТИС + БЛОКИРОВКА АКТИВАЦИИ MEMCACHED // ============================================================ /** - * Попробовать установить drop-in Memcached, если: - * - плагин memcached установлен, - * - object-cache.php ещё нет, - * - PHP-расширение Memcache доступно. + * Убрать ссылку "Активировать" у плагина Memcached Object Cache. + * Плагин — только источник object-cache.php, активация вызывает фатальную ошибку. */ -function dekart_try_install_memcached_dropin(): void { - $target = WP_CONTENT_DIR . '/object-cache.php'; - if ( file_exists( $target ) ) { - return; // drop-in уже есть - } - - $source = WP_CONTENT_DIR . '/plugins/memcached/object-cache.php'; - if ( ! file_exists( $source ) ) { - return; // плагин не установлен - } - - if ( ! class_exists( 'Memcache' ) && ! class_exists( 'Memcached' ) ) { - return; // нет PHP-расширения - } - - copy( $source, $target ); -} - -add_action( 'plugins_loaded', 'dekart_try_install_memcached_dropin', 0 ); +add_filter( 'plugin_action_links_memcached/object-cache.php', function ( $actions ) { + unset( $actions['activate'] ); + $actions['info'] = '⚠ установите вручную'; + return $actions; +} ); // ============================================================ // 6. АДМИН-НОТИС + БЛОКИРОВКА АКТИВАЦИИ MEMCACHED PLUGIN @@ -151,19 +135,38 @@ add_action( 'admin_notices', function () { $target = WP_CONTENT_DIR . '/object-cache.php'; if ( ! file_exists( $source ) ) { - return; + return; // плагин не установлен } if ( file_exists( $target ) ) { - return; + return; // drop-in уже стоит } + if ( class_exists( 'Memcache' ) || class_exists( 'Memcached' ) ) { + $conn = @fsockopen( '127.0.0.1', 11211, $errno, $errstr, 0.5 ); + if ( $conn ) { + fclose( $conn ); + // Всё готово — можно установить вручную + printf( + '

%s

', + 'Кеширование: Memcached доступен. Установите drop-in командой: + cp ' . esc_html( str_replace( ABSPATH, '', $source ) ) . ' ' . esc_html( str_replace( ABSPATH, '', $target ) ) . ' + или через WP-CLI: wp dekart cache-memcached' + ); + return; + } + // Есть расширение, но сервер не отвечает + printf( + '

%s

', + 'Кеширование: PHP-расширение Memcache установлено, но сервер Memcached (127.0.0.1:11211) не отвечает. + Запустите Memcached на сервере или обратитесь в хостинг.' + ); return; } printf( '

%s

', - 'Настройка кеширования: Плагин Memcached Object Cache установлен, но PHP-расширение memcache не найдено. - Установите его на сервере (sudo apt install php-memcache), после чего drop-in скопируется автоматически. + 'Кеширование: Плагин Memcached Object Cache установлен, но PHP-расширение memcache не найдено. + Установите его на сервере (через панель хостинга: PHP → Расширения → memcache). Не активируйте плагин — это вызовет фатальную ошибку. Он работает как drop-in.' ); } );