⚡️ Вы кешируете запросы в Redis, но забыли про OPcache?PHP компилирует каждый .php-файл в байткод при каждом запросе — если не настроен OPcache. Это означает лишние CPU-циклы на парсинг даже самого тривиального хелпера.Минимальный конфиг для прода:; включаемopcache.enable=1opcache.enable_cli=1; кол-во кешируемых файлов (>= числа файлов в проекте)opcache.max_accelerated_files=20000; размер разделяемой памяти (MB)opcache.memory_consumption=256; кешируем строки — экономим RAMopcache.interned_strings_buffer=16; в продакшне: 0 (не проверять изменения файлов)opcache.validate_timestamps=0Почему validate\_timestamps=0 в проде?При каждом запросе PHP проверяет mtime файла на диске. На высоких RPS — это сотни лишних stat()-syscall'ов в секунду. Инвалидируйте кеш вручную через opcache_reset() или перезапуск PHP-FPM при деплое.💡 Хотите проверить, что лежит в кеше и сколько памяти занято? Используйте opcache_get_status() — или поставьте opcache-gui для визуального мониторинга.Библиотека пхпшника#vardump
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
@phpproglib
Все самое полезное для пхпшника в одном канале.По рекламе: @proglib_advУчиться у нас: https://proglib.io/w/bca892d6Для обратной связи: @proglibrary_feeedback_botРКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Последние посты
Самый востребованный навык в ИТ в 2026-м — навык создания ИИ-агентовМы полностью переработали курс «Разработка AI-агентов» под реалии 2026 года. Никакой долгой теории — с самого начала пишем код. Обучать и делиться набитыми шишками будут эксперты-практики из Газпромбанка, Альфа-Банка и других бигтехов.В программе:— архитектура автономных систем с тестированием, ReAct-циклами и контролем токенов;— практическая работа с актуальными фреймворками LangGraph, AutoGen, MCP и CrewAI;— настройка продвинутого RAG для парсинга документов и точного поиска;— внедрение решений с учётом действующего законодательства (152-ФЗ);— дипломная работа, за основу которой можно взять свой рабочий проект или задачу, которую предложим мы.Эксперты поделятся инсайтами из реального продакшна — тем, о чём вам никогда не расскажет ни одна нейросеть.Запись первого открытого вебинара, на котором мы вместе с руководителем AI-направления в Альфа-Банке Полиной Полуниной пилили агента в прямом эфире.Ах да, чуть не забыли! Дарим промокод AGENTSWEB на скидку 10 000 рублей и два курса сверху при покупке до 15 марта 🎁→ Стать AI-инженером
🎮 Балансировка нагрузки для UDP-сервисовЕсли необходимо распределить трафик между несколькими UDP-серверами, то решение можно найти в книге «Nginx Cookbook: Advanced Recipes for High-performance Load Balancing» автор показывает использование модуля stream с параметром udp для балансировки нагрузки на уровне транспортного слоя.Пример кодаstream { upstream ntp { server ntp1.example.com:123 weight=2; server ntp2.example.com:123; } server { listen 123 udp; proxy_pass ntp; }}Преимущества— Поддержка балансировки для UDP-сервисов.— Гибкая настройка весов серверов.— Резервирование серверов для повышения надёжности.Еще больше полезных книг — в нашем канале @progbook
✔️ PHP-тест: Static state + OPcache + PreloadingКлассический баг, который ломает прод и не воспроизводится локально 👇📦 ЗаданиеКоманда добавила preloading в production для ускорения. Через день в логах появились странные ошибки: у разных пользователей в одном запросе перемешиваются данные — кто-то видит чужие настройки, кто-то получает null там, где не должен. На dev-машинах не воспроизводится. Найдите проблему в коде:// preload.php require_once 'src/Config.php';require_once 'src/UserContext.php';require_once 'src/RequestPipeline.php';// config/app.phpclass Config{ private static array $data = []; private static bool $loaded = false; public static function load(string $env): void { if (self::$loaded) { return; } self::$data = parse_ini_file("config/{$env}.ini"); self::$loaded = true; } public static function get(string $key): mixed { return self::$data[$key] ?? null; }}// src/UserContext.phpclass UserContext{ private static ?array $current = null; public static function set(array $user): void { self::$current = $user; } public static function get(): ?array { return self::$current; } public static function clear(): void { self::$current = null; }}// src/RequestPipeline.phpclass RequestPipeline{ private static array $middlewareResults = []; public static function addResult(string $key, mixed $value): void { self::$middlewareResults[$key] = $value; } public static function getResult(string $key): mixed { return self::$middlewareResults[$key] ?? null; } public static function reset(): void { self::$middlewareResults = []; }}// public/index.phpConfig::load($_ENV['APP_ENV'] ?? 'production');$user = Auth::check($_SERVER['HTTP_AUTHORIZATION'] ?? '');UserContext::set($user);RequestPipeline::addResult('ip', $_SERVER['REMOTE_ADDR']);RequestPipeline::addResult('ua', $_SERVER['HTTP_USER_AGENT'] ?? '');$app->h
💡 Не передавай Request вглубь приложения// ❌class OrderService { public function create(Request $request): Order { return Order::create([ 'user_id' => $request->user()->id, 'amount' => $request->amount, ]); }}// ✅class OrderService { public function create(int $userId, float $amount): Order { return Order::create([ 'user_id' => $userId, 'amount' => $amount, ]); }}Сервис не должен знать что такое HTTP. Он принимает данные, а не запрос. Протестировать первый вариант — боль. Второй вызываешь с двумя числами.Библиотека пхпшника#vardump

📂 Шпаргалка по вводу-выводуЧтобы не гуглить каждый раз: как читать из STDIN, быстро проглатывать целый файл, дописывать в конец и копировать потоки — собрали базовые, но практичные примеры.▪️ Чтение одной строки из STDIN:<?php$line = trim(fgets(STDIN)); // читает строку до перевода строкиecho "Введено: $line\n";Основано на CLI-константе STDIN. ▪️ Чтение всего STDIN:<?php$all = stream_get_contents(STDIN); // либо file_get_contents('php://stdin')echo $all;php://stdin — стандартный поток ввода процесса PHP. ▪️ Чтение файла целиком:<?php$data = file_get_contents('file.txt');if ($data === false) { fwrite(STDERR, "Не удалось прочитать файл\n"); exit(1);}echo $data;file_get_contents() — предпочтительный способ прочитать файл в строку. ▪️ Построчное чтение файла:<?php$fh = fopen('file.txt', 'r');if (!$fh) { die("Не удалось открыть файл\n"); }while (($line = fgets($fh)) !== false) { echo $line; // обработка строки}fclose($fh);Используем классический цикл с fgets(). ▪️ Запись в файл (перезапись):<?php$bytes = file_put_contents('out.txt', "Привет, PHP!\n", LOCK_EX);if ($bytes === false) { die("Ошибка записи\n");}file_put_contents() перезапишет файл (или создаст, если нет). Можно добавить LOCK_EX для блокировки. ▪️ Запись в файл (добавление в конец):<?php$ok = file_put_contents('out.txt', "Новая строка\n", FILE_APPEND | LOCK_EX);if ($ok === false) { die("Ошибка записи\n"); }Флаг FILE_APPEND дописывает, а не перезаписывает. ▪️ Копирование файлов (быстро и потоково):<?php$src = fopen('src.txt', 'r');$dst = fopen('dst.txt', 'w');if (!$src || !$dst) { die("Ошибка открытия файлов\n"); }$copied = stream_copy_to_stream($src, $dst); // копирует весь остатокfclose($src);fclose($dst);echo "Скопировано байт: $copied\n";stream_copy_to_stream() копирует данные из одного потока в другой (удобно и для сетевых/памятных потоков). ▪️ Работа с буфером (in-memory I/O):<?php$buf = fopen('php://temp', 'r+'); // авто-переключение в файл при больших объёмахfwrite($buf, "Hello, ");fwrite($
❓ В чем разница между '==' и '===' ?Нестрогое сравнение («==»): При использовании двойного знака равенства PHP сравнивает значения операндов после их преобразования в общий тип данных. Например, 5 == '5' вернет true, потому что PHP преобразует строку '5' в целое число 5 перед сравнением.Строгое сравнение («===»): При использовании тройного знака равенства PHP сравнивает не только значения операндов, но и их типы данных. Это означает, что для того чтобы выражение было истинным, значения операндов должны быть одинаковыми и одного типа. Например, 5 === '5' вернет false, потому что типы операндов различны.

🐳 Прокачай Docker CLIDockerlings предлагает более 15 упражнений, которые последовательно учат работать с контейнерами, Dockerfile, сетями, томами и многими другими важными аспектами Docker. Главная особенность — это удобный интерфейс, который позволяющий выполнять задания и сразу же проверять свои решения.🔗 Попробовать Docker CLIБиблиотека пхпшника
⌨️ Топ-вакансий по PHP за неделюPHP программист — 150 000 - 200 000₽ — удалёнкаPHP программист — до 350 000 ₽ — удалёнкаРНР-разработчик — 250 000 — 450 000 ₽ — гибрид (Москва, Санкт-Петербург)➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs