﻿---
title: PHP-оптимизация для WordPress
description: "Настройка PHP для производительности WordPress: версии, php.ini, лимиты памяти, таймауты, размеры загрузок и замена WP-Cron."
---

WordPress написан на PHP, поэтому версия и конфигурация PHP напрямую влияют на производительность и безопасность сайта.

## Версия PHP

**Актуальные рекомендации:**

- **PHP 7.4** — минимальная официально поддерживаемая версия для WordPress
- **PHP 8.0–8.1** — «совместимы с исключениями»
- **PHP 8.2+** — полная поддержка в новых версиях WordPress

Новые версии PHP приносят не только функции, но и **производительность, и безопасность**. Версии ниже 7.4 достигли End of Life и **подвергают сайт уязвимостям**.

> ⚠️ При обновлении PHP тестируйте совместимость плагинов и темы на staging-окружении. Старые плагины могут не работать с PHP 8+.

### Проверка совместимости

```bash
# WP-CLI команда для проверки совместимости плагинов и темы
wp phpcompat <version>
```

Таблица совместимости: [PHP Compatibility and WordPress Versions](https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/).

## Конфигурация PHP — `php.ini`

PHP настраивается через `php.ini`. На некоторых хостингах доступна настройка через `.htaccess` или `.user.ini`.

### Таймауты

Три ключевых параметра, которые должны быть **согласованы** между собой и с таймаутом веб-сервера (Apache/Nginx):

```ini
; Максимальное время выполнения скрипта (не включает системные вызовы и MySQL-запросы)
max_execution_time = 300

; Максимальное время на приём данных от веб-сервера (например, загрузка файлов)
max_input_time = 60
```

**Важно:** если таймаут веб-сервера меньше `max_execution_time`, запрос будет убит сервером независимо от настройки PHP. Таймауты должны увеличиваться пропорционально нагрузке — но в разумных пределах, чтобы не вызывать каскадный эффект.

### Лимиты памяти

```ini
; Глобальный лимит PHP на один процесс
memory_limit = 256M
```

WordPress имеет **два собственных лимита** в `wp-config.php`:

```php
// Лимит для фронтенда (по умолчанию 40M, для Multisite — 64M)
define('WP_MEMORY_LIMIT', '128M');

// Лимит для админки (по умолчанию 256M)
define('WP_MAX_MEMORY_LIMIT', '256M');
```

**Правило:** `WP_MEMORY_LIMIT <= WP_MAX_MEMORY_LIMIT`. Админка требует больше памяти (медиа-загрузки, тяжёлые страницы настроек).

WordPress попытается поднять `memory_limit` до этих значений, но не опустит его, если в `php.ini` значение выше.

### Размеры загрузок

```ini
; Максимальный размер одного загружаемого файла
upload_max_filesize = 64M

; Максимальный размер всего POST-запроса
post_max_size = 64M
```

**Правило:** `post_max_size >= upload_max_filesize`. Иначе PHP не обработает запросы, превышающие `post_max_size`.

## Замена WP-Cron

`wp-cron.php` запускается при каждом визите и проверяет, не пора ли выполнить отложенные задачи. Проверки лёгкие, но создают **дополнительную нагрузку при каждом запросе**.

### Отключение встроенного крона

```php
// wp-config.php
define('DISABLE_WP_CRON', true);
```

### Альтернатива: системный cron

```bash
# Добавить в crontab (каждые 15 минут)
*/15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
```

Или через WP-CLI:

```bash
*/15 * * * * wp cron event run --due-now --path=/var/www/html
```

## Связь с другими разделами

- [Кэширование WordPress](https://wpcraft.ru/kb/stacks/wordpress/cache/server-level-cache.md) — плагины и серверный кэш
- [Оптимизация WordPress](https://wpcraft.ru/kb/stacks/wordpress/performance/optimization.md) — общий обзор факторов производительности

---

*Источник: [WordPress Developer Handbook — PHP Optimization](https://developer.wordpress.org/advanced-administration/performance/php/)*