fix: remove auto-copy memcached drop-in (prevents broken HTML on prod)
- 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
This commit is contained in:
parent
9fb676319a
commit
0bb005339c
@ -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'] = '<span style="color:#999">⚠ установите вручную</span>';
|
||||
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(
|
||||
'<div class="notice notice-info is-dismissible"><p>%s</p></div>',
|
||||
'<strong>Кеширование:</strong> Memcached доступен. Установите drop-in командой:
|
||||
<code>cp ' . esc_html( str_replace( ABSPATH, '', $source ) ) . ' ' . esc_html( str_replace( ABSPATH, '', $target ) ) . '</code>
|
||||
или через WP-CLI: <code>wp dekart cache-memcached</code>'
|
||||
);
|
||||
return;
|
||||
}
|
||||
// Есть расширение, но сервер не отвечает
|
||||
printf(
|
||||
'<div class="notice notice-warning is-dismissible"><p>%s</p></div>',
|
||||
'<strong>Кеширование:</strong> PHP-расширение Memcache установлено, но сервер Memcached (127.0.0.1:11211) не отвечает.
|
||||
Запустите Memcached на сервере или обратитесь в хостинг.'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
printf(
|
||||
'<div class="notice notice-warning is-dismissible"><p>%s</p></div>',
|
||||
'<strong>Настройка кеширования:</strong> Плагин Memcached Object Cache установлен, но PHP-расширение <code>memcache</code> не найдено.
|
||||
Установите его на сервере (sudo apt install php-memcache), после чего drop-in скопируется автоматически.
|
||||
'<strong>Кеширование:</strong> Плагин Memcached Object Cache установлен, но PHP-расширение <code>memcache</code> не найдено.
|
||||
Установите его на сервере (через панель хостинга: PHP → Расширения → memcache).
|
||||
<strong>Не активируйте плагин</strong> — это вызовет фатальную ошибку. Он работает как drop-in.'
|
||||
);
|
||||
} );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user