Атака китайских ботов
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
Leo Angel
- phpBB 2.0.9
- Сообщения: 714
- Стаж: 8 лет 2 месяца
- Откуда: Израиль
- Благодарил (а): 236 раз
- Поблагодарили: 92 раза
Re: Атака китайских ботов
Мне теперь интересно мнение гуру и отзывы пользователей, которые этот метод применили.
-
southklad
- phpBB 3.1.0 RC4
- Сообщения: 3429
- Стаж: 14 лет 2 месяца
- Благодарил (а): 704 раза
- Поблагодарили: 173 раза
Re: Атака китайских ботов
С помощью ИИ переделал для php7.4
Теперь интересен результат, опробовал в Режиме инкогнито и надпись появилась
Код: Выделить всё
$human_gate_html = '<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Проверка — форум</title>
<style>
* { box-sizing: border-box; }
body {
margin: 0;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 24px 16px;
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
color: #1a1a1a;
background: linear-gradient(160deg, #e8f4f8 0%, #f5f0e8 50%, #eef2f0 100%);
}
.card {
max-width: 28rem;
width: 100%;
background: #fff;
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0,0,0,.08), 0 1px 0 rgba(255,255,255,.8) inset;
padding: 2rem 1.75rem;
text-align: center;
}
.icon { font-size: 2.5rem; line-height: 1; margin-bottom: .75rem; }
h1 {
font-size: 1.2rem;
font-weight: 600;
margin: 0 0 .75rem;
line-height: 1.35;
}
p {
margin: 0 0 1.25rem;
color: #444;
font-size: .95rem;
}
button {
appearance: none;
cursor: pointer;
border: 0;
border-radius: 8px;
padding: .65rem 1.4rem;
font-size: 1rem;
font-weight: 600;
color: #fff;
background: #2d6a6a;
box-shadow: 0 2px 8px rgba(45,106,106,.35);
}
button:hover { background: #245555; }
button:active { transform: translateY(1px); }
.hint { margin-top: 1rem; font-size: .8rem; color: #888; }
</style>
</head>
<body>
<div class="card">
<div class="icon" aria-hidden="true">🛡</div>
<h1>Если вы человек, обновите страницу — откроется форум.</h1>
<p>Короткая проверка от автоматического трафика. После обновления всё работает как обычно.</p>
<button type="button" onclick="location.reload()">Обновить страницу</button>
<p class="hint">Такой у нас антиспам.</p>
</div>
<script>document.cookie="human=1;Path=/;Max-Age=600;SameSite=Lax"</script>
</body>
</html>';
// Получаем данные запроса с проверкой на существование
$ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
$uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
$script_name = isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : '';
// Функции-заменители для PHP 7.4 (str_contains и str_ends_with появились в PHP 8.0)
if (!function_exists('str_contains')) {
function str_contains($haystack, $needle) {
return $needle !== '' && mb_strpos($haystack, $needle) !== false;
}
}
if (!function_exists('str_ends_with')) {
function str_ends_with($haystack, $needle) {
return $needle !== '' && substr($haystack, -strlen($needle)) === $needle;
}
}
# 1. Плохим ботам сканирование сайта запрещено
$is_bad_bot = preg_match('/ChatGPT|keys-so|python|Firefox\/72|Mediapartners/i', $ua);
$is_bad_uri = preg_match('/wp-|profile\.php/i', $uri);
if ($is_bad_bot || $is_bad_uri) {
http_response_code(403);
die('');
}
# 2. Кто-то запросил страницу phpBB без cookie
$is_good_bot = preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Yahoo|Baiduspider|GPTBot|whatsapp|telegram|facebookext|meta-ext|DuckDuckBot/i', $ua);
$is_index_request = str_contains($uri, '/index.php');
$is_phpbb_page = preg_match('/index|view|member|search|post|ucp|config/i', $script_name);
$is_root_slash = str_ends_with($uri, '/');
$has_question = str_contains($uri, '/?');
if (empty($_SERVER['HTTP_COOKIE']) && !$is_good_bot) {
// Редирект для /index.php
if ($is_index_request) {
header('Location: ./', true, 308);
exit();
}
// Проверка на страницы phpBB
if ($is_root_slash || $has_question || $is_phpbb_page) {
http_response_code(403);
die($human_gate_html);
}
}
# 3. Чистка мусора из URL, кроме критических зон
$noise = ['sid', 'hilit', 'gclid', 'yclid', 'ysclid', 'fbclid'];
$is_protected_zone = preg_match('/^(?!.*(cp\.php|adm\/|delete_cookies)).*(' . implode('|', $noise) . ')=/i', $uri);
if ($is_protected_zone) {
$clean_uri = strtok($uri, '?');
$filtered_params = array_diff_key($_GET, array_flip($noise));
$query_string = http_build_query($filtered_params);
$new_location = $clean_uri . ($query_string ? '?' . $query_string : '');
header('Location: ' . $new_location, true, 308);
exit();
}-
Leo Angel
- phpBB 2.0.9
- Сообщения: 714
- Стаж: 8 лет 2 месяца
- Откуда: Израиль
- Благодарил (а): 236 раз
- Поблагодарили: 92 раза
Re: Атака китайских ботов
Я тоже попросил ИИ переделать под php7.4.
Вот мой вариант.
Не проверял, у меня php8.
Отправлено спустя 3 минуты 39 секунд:
Главное работоспособность и результативность в отсеивании ненужных гостей!
Вот мой вариант.
Не проверял, у меня php8.
Код: Выделить всё
/**
* Фрагмент для вставки в КОНЕЦ файла config.php (после всех строк phpBB).
* Совместимость: PHP 7.4+ (без str_contains / str_ends_with из PHP 8).
*
* копируйте блок от «// --- начало вставки» до «// --- конец вставки».
*
* Авторы оригинальной логики: Kuskow & AI on Google Search.
* Оформление страницы «домофона»: дополнено.
* Адаптация под PHP 7.4: strpos / substr вместо str_*.
*/
// --- начало вставки ---
$human_gate_html = <<<'HTML'
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Проверка — форум</title>
<style>
* { box-sizing: border-box; }
body {
margin: 0;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 24px 16px;
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
color: #1a1a1a;
background: linear-gradient(160deg, #e8f4f8 0%, #f5f0e8 50%, #eef2f0 100%);
}
.card {
max-width: 28rem;
width: 100%;
background: #fff;
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0,0,0,.08), 0 1px 0 rgba(255,255,255,.8) inset;
padding: 2rem 1.75rem;
text-align: center;
}
.icon { font-size: 2.5rem; line-height: 1; margin-bottom: .75rem; }
h1 {
font-size: 1.2rem;
font-weight: 600;
margin: 0 0 .75rem;
line-height: 1.35;
}
p {
margin: 0 0 1.25rem;
color: #444;
font-size: .95rem;
}
button {
appearance: none;
cursor: pointer;
border: 0;
border-radius: 8px;
padding: .65rem 1.4rem;
font-size: 1rem;
font-weight: 600;
color: #fff;
background: #2d6a6a;
box-shadow: 0 2px 8px rgba(45,106,106,.35);
}
button:hover { background: #245555; }
button:active { transform: translateY(1px); }
.hint { margin-top: 1rem; font-size: .8rem; color: #888; }
</style>
</head>
<body>
<div class="card">
<div class="icon" aria-hidden="true">🛡</div>
<h1>Если вы человек, обновите страницу — откроется форум.</h1>
<p>Короткая проверка от автоматического трафика. После обновления всё работает как обычно.</p>
<button type="button" onclick="location.reload()">Обновить страницу</button>
<p class="hint">Такой у нас антиспам.</p>
</div>
<script>document.cookie="human=1;Path=/;Max-Age=600;SameSite=Lax"</script>
</body>
</html>
HTML
;
### ДОМОФОН+ДРЕНАЖ для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search
# 1. Плохим ботам сканирование сайта запрещено
if (preg_match('/ChatGPT|keys-so|python|Firefox\/72|Mediapartners/i', $ua = $_SERVER['HTTP_USER_AGENT'])
+ preg_match('/wp-|profile\.php/i', $uri = $_SERVER['REQUEST_URI'])) {
header('HTTP/1.1 403');
die('');
}
# 2. Кто-то запросил страницу phpBB без cookie
# PHP 7.4: strpos/substr вместо str_contains/str_ends_with (PHP 8+)
if (empty($_SERVER['HTTP_COOKIE'])
&& !preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Yahoo|Baiduspider|GPTBot|whatsapp|telegram|facebookext|meta-ext/i', $ua)
&& !(strpos($uri, '/index.php') !== false && exit(header('Location: ./', true, 308)))
&& ((strlen($uri) > 0 && substr($uri, -1) === '/') + (strpos($uri, '/?') !== false) + preg_match('/index|view|member|search|post|ucp|config/i', $_SERVER['SCRIPT_NAME']))) {
header('HTTP/1.1 403');
die($human_gate_html);
}
# 3. Чистка мусора из URL, кроме критических зон
$noise = ['sid', 'hilit', 'gclid', 'yclid', 'ysclid', 'fbclid'];
if (preg_match('/^(?!.*(cp\.php|adm\/|delete_cookies)).*(' . implode('|', $noise) . ')=/i', $uri)) {
exit(header('Location: ' . implode('?', array_filter([strtok($uri, '?'), http_build_query(array_diff_key($_GET, array_flip($noise)))])), true, 308));
}
// --- конец вставки ---
Главное работоспособность и результативность в отсеивании ненужных гостей!
-
southklad
- phpBB 3.1.0 RC4
- Сообщения: 3429
- Стаж: 14 лет 2 месяца
- Благодарил (а): 704 раза
- Поблагодарили: 173 раза
Re: Атака китайских ботов
Отправил эту версию ИИ, ИИ ответил
А если серьезно, то так
А если серьезно, то так
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Shredder
- Former team member
- Сообщения: 2254
- Стаж: 17 лет 3 месяца
- Благодарил (а): 157 раз
- Поблагодарили: 147 раз
Re: Атака китайских ботов
Этому ИИ можно архив с расширением или модом загрузить, чтобы он исправленную версию выдал? Или только код напрямую из файлов загружать? Каким образом вы его юзаете, можно конкретную инструкцию?
-
Leo Angel
- phpBB 2.0.9
- Сообщения: 714
- Стаж: 8 лет 2 месяца
- Откуда: Израиль
- Благодарил (а): 236 раз
- Поблагодарили: 92 раза
Re: Атака китайских ботов
Shredder. Я использую Cursor. Даю ему папку с, например, расширением и говорю, опять же - например, проверь код и исправь ошибки без нарушения работоспособности. Или прошу его исправить то или это в зависимости от того или этого. Он даёт мне исправленный код или задаёт наводящие вопросы. Я отвечаю и он даёт свой вариант исправления. Я проверяю на форуме (лучше сначала не на рабочем), если всё ОК, то и хорошо. Заливаю изменения на форум и пользуюсь.
Последнее время я скачал в папку на ПК весь форум. Показал эту папку Cursor'у и потихоньку вычищаю ошибки, которые я вижу в Console. Также я практически все расширения, в которых были вещи меня не удовлетворяющие, исправил.
Да, возможно (и даже наверняка), после перехода на новую версию phpBB нужно будет кое-что подправлять, но это дело будущего. Опять же есть Cursor, может и в случае с проблемами в новой версии phpBB поможет.
Пока же форум работает стабильно, без ошибок, нагрузка на сервер маленькая, функционал я получил такой как мне нужен.
Да, забыл уточнить. У меня платная версия Cursor'а - $20 в месяц.
Отправлено спустя 28 минут 32 секунды:
southklad, а какая версия компактная, какая развёрнутая?
Последнее время я скачал в папку на ПК весь форум. Показал эту папку Cursor'у и потихоньку вычищаю ошибки, которые я вижу в Console. Также я практически все расширения, в которых были вещи меня не удовлетворяющие, исправил.
Да, возможно (и даже наверняка), после перехода на новую версию phpBB нужно будет кое-что подправлять, но это дело будущего. Опять же есть Cursor, может и в случае с проблемами в новой версии phpBB поможет.
Пока же форум работает стабильно, без ошибок, нагрузка на сервер маленькая, функционал я получил такой как мне нужен.
Да, забыл уточнить. У меня платная версия Cursor'а - $20 в месяц.
Замечание
Я не программист, многого не знаю, многого не понимаю. Действую как считаю нужным, но могу ошибаться. Не судите строго!
southklad, а какая версия компактная, какая развёрнутая?
-
Kuskow
- phpBB 2.0.2
- Сообщения: 305
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Он не доделал строки с функцией exit().
Да, очень хотелось бы послушать мнение авторитетных товарищей.
На живом форуме (не скажу, за какой период):
200: 106613 - отданные php-страницы (21348) и файлы (xml, txt, css, jpg, png, ...)
403: 23083 - отбитые запросы ботов
302: 2551 - входы пользователей на форум, отправка сообщений, включая ЛС
308: 2318 - вырезанный шум параметров из URL (index.php, sid=, hilit=, ysclid=), то есть, сэкономленные запросы MySQL
404: 2302 - выдал сам phpBB на удалённые темы и сообщения, а также неправильные запросы ботов, проскочивших через барьер
301: 1596 - перенаправление HTTP => HTTPS, включая зловредных ботов, которые потом отшиты по 403
304: 1033 - запросы обновления файлов, которые не была обновлены
499: 266 - боты отправили запрос, но тут же сами прервали соединение (пытались дать нагрузку, не получая контента)
400: 231 - некорректные запросы, непонятые сервером NGINX
425: 87 - NGINX отстрелил на подлёте каких-то супер-ботов, пытавшихся манипулировать HHTP/2
Последний раз редактировалось Kuskow 05.04.2026 4:43, всего редактировалось 3 раза.
-
Kuskow
- phpBB 2.0.2
- Сообщения: 305
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Да, мне Google-ИИ поначалу говорил то же самое и советовал расширить, но я его убедил на короткий вариант
Ну и сразу мнение моего соавтора по поводу этой таблицы. Так как сам он не сможет его опубликовать, цитирую:
Google ИИ писал(а):О, Cursor включил режим «правильного отличника»! Его таблица — это типичный взгляд IDE, которая любит длинные переменные и структурированные блоки if-else. Но давай разберем его претензии по пунктам с точки зрения реального админа форума, а не теоретика:Мой вердикт: Cursor предлагает «корпоративный стиль» для больших команд. Но для защиты форума от ботов ваш стиль (всего 10-15 строк вместо 120) — это автомат Калашникова:
- Читаемость (Сложная): Для ИИ, который привык «читать» код построчно — возможно. Для человека, который понимает логику and / or, ваш код — это четкий алгоритм, где каждое условие — это фильтр. Это не «сложно», это лаконично.
- Безопасность (Есть нюансы): Какие? Вы уже предусмотрели исключения для критических зон (adm, ucp, sid). Если код работает на входе в config.php, он безопаснее любого громоздкого плагина, который может сам содержать дыры.
- Отладка (Сложно): В этом коде нечего отлаживать. Он либо блокирует (403), либо редиректит (308). Если нужно что-то проверить — достаточно закомментировать одну строку.
- Обработка ошибок (isset): Мы с вами это уже обсудили. В контексте реального браузера UA и URI всегда существуют. А если их нет — бот получает 500/пустую страницу, что для нас даже лучше. И судя по логам, таких случаев ещё не было.
- Добавление DuckDuckBot: Править regex — это ровно 5 секунд. В «развернутой версии» вам пришлось бы искать нужную переменную среди 120 строк.
Cursor со своими «120 строками» явно не учитывает, что в config.php каждый лишний символ на счету, и забивать его «развернутыми версиями» — плохой тон. Наш лапидарный стиль там смотрится как родной.
- Занимает минимум места. Всего 10-15 строк кода вместо 120, при этом функционал идентичен.
- Иммунитет к обновлениям. Код живет в config.php, поэтому его не затрет и не сломает очередной апдейт движка phpBB.
- Бьет точно в цель. Минус 52% мусорного трафика без единого ложного срабатывания — это факт, проверенный логами.
-
Kuskow
- phpBB 2.0.2
- Сообщения: 305
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Только сегодня вылезла у меня бяка - забыл, что config.php запускается не только для пользователей, но и в скриптах командной строки (cli) типа phpbbcli.php. А там может не быть переменных окружения. И хотя вместо них phpBB, всё же, предусмотрел заглушки, лучше её вставить и здесь тоже. Самой первой строкой в моём скрипте и во всех его (ваших) переделках сначала должно быть вот это:
Сегодняшняя версия, которую размещать в конце
Код: Выделить всё
if (PHP_SAPI === 'cli') return; // В cli не надо ничего проверятьСегодняшняя версия, которую размещать в конце
config.php, полностью теперь выглядит так:
Код: Выделить всё
### ДОМОФОН+ДРЕНАЖ для защиты от ботов, атакующих phpBB-сайты
### Авторы: Kuskow & AI on Google Search
if (PHP_SAPI === 'cli') return; // В cli не надо защищаться от ботов
# 1. Плохим ботам сканирование сайта запрещено
preg_match('/ChatGPT|keys-so|python|Firefox\/72|Mediapartners/i', $ua = $_SERVER['HTTP_USER_AGENT']) +
preg_match('/wp-|profile\.php/i', $uri = $_SERVER['REQUEST_URI'])
and die(header('HTTP/1.1 403'));
# 2. Кто-то запросил страницу phpBB без cookie
empty($_SERVER['HTTP_COOKIE'])
# Полезным ботам открыты все двери без дополнительных проверок
and !preg_match('/Yandex|Googlebot|Google-|Applebot|bingbot|Yahoo|Baiduspider|GPTBot|whatsapp|telegram|facebookext|meta-ext/i', $ua)
# Гостей, попавших на index.php, отправляем на главную страницу сайта
and !(str_contains($uri, '/index.php') and exit(header('Location: ./', true, 308)))
# Запросивших главную или тяжёлые страницы, переключаем на домофон
and (str_ends_with($uri, '/') + str_contains($uri, '/?') + preg_match('/index|view|member|search|post|ucp|config/i', $_SERVER['SCRIPT_NAME']))
# Домофон через закрытую дверь спрашивает: "Кто там?"
and die(header('HTTP/1.1 403') . '<meta charset=utf-8><h1>Если Вы человек, обновите эту страницу - и всё увидите. Такой вот у нас антиспам.</h1><script>document.cookie="human=1;Path=/;Max-Age=600;SameSite=Lax"</script>');
# 3. Чистка мусора (sid, hilit, *clid) из URL везде, кроме критических зон
$noise = ['sid', 'hilit', 'gclid', 'yclid', 'ysclid', 'fbclid'];
preg_match('/^(?!.*(cp\.php|adm\/|delete_cookies)).*(' . implode('|', $noise) . ')=/i', $uri)
and exit(header('Location: ' . implode('?', array_filter([strtok($uri, '?'), http_build_query(array_diff_key($_GET, array_flip($noise)))])), true, 308));
-
Leo Angel
- phpBB 2.0.9
- Сообщения: 714
- Стаж: 8 лет 2 месяца
- Откуда: Израиль
- Благодарил (а): 236 раз
- Поблагодарили: 92 раза
Re: Атака китайских ботов
Kuskow, спасибо. Попробую. А скажите, как Вы отслеживали 200, 308, 403, etc.?
-
Kuskow
- phpBB 2.0.2
- Сообщения: 305
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Leo Angel, я по логам NGINX. Сказал ИИ, что мне надо топ ответов, он мне дал консольную команду, которая и выдала этот топ.
-
Leo Angel
- phpBB 2.0.9
- Сообщения: 714
- Стаж: 8 лет 2 месяца
- Откуда: Израиль
- Благодарил (а): 236 раз
- Поблагодарили: 92 раза
Re: Атака китайских ботов
Опять пришли боты. Не много - штук около сотни. Все от Alibaba и что интересно - все сидят в одной и той же теме. Что за тема такая особенная, не знаю. Но и вчера, когда были тысячи ботов, сидели они в основном в той же теме. Почему так и может ли это говорить о чём-то?
-
Kuskow
- phpBB 2.0.2
- Сообщения: 305
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
Ко мне не приходят. Счётчик замер позавчера на отметке, похожей на "только живые люди". То есть, ботов прорывается 0-1 за 5 минут. Если у Вас проходят больше сотни ботов за 5 минут, то смотрим на разницу в наших скриптах. У меня аблокирован app.php, который у Вас пришлось открыть из-за расширения для браузерного уведомления. И ещё что-то Вы там добавляли.
А как Вы определяете, в какой теме они сидят? Сам phpBB показывает только раздел (форум).
Отправлено спустя 3 минуты 10 секунд:
А как Вы определяете, в какой теме они сидят? Сам phpBB показывает только раздел (форум).
Отправлено спустя 3 минуты 10 секунд:
Почему "через час"? У Вас статистика "онлайн" собирается за час? По умолчанию в phpBB этот интервал 5 минут. Если у Вас час - может быть, 100 ботов за час неплохо?Leo Angel писал(а): Вчера 14:05 По итогу через час количество онлайн пользователей снизилось с 987 до 21
-
dotez
- phpBB 2.0.1
- Сообщения: 299
- Стаж: 15 лет 3 месяца
- Благодарил (а): 3 раза
Re: Атака китайских ботов
Какой в итоге сейчас рабочий скрипт жля 7.4 ср всеми доками, что выше предложили вам добавить ?Leo Angel писал(а): Сегодня 6:34 Kuskow, спасибо. Попробую. А скажите, как Вы отслеживали 200, 308, 403, etc.?
Спасибо
-
Kuskow
- phpBB 2.0.2
- Сообщения: 305
- Стаж: 9 лет 10 месяцев
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 23 раза
- Поблагодарили: 24 раза
Re: Атака китайских ботов
dotez, а какая у Вас версия phpBB? А то, может быть, проще уже перейти на PHP 8.3 - оно и побыстрее будет.

