Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Все самое полезное для пхпшника в одном канале. По рекламе: @proglib_adv Учиться у нас: clc.to/M561SQ Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Show more📈 Analytical overview of Telegram channel Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Channel Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter (@phpproglib) in the Russian language segment is an active participant. Currently, the community unites 10 523 subscribers, ranking 11 314 in the Technologies & Applications category and 60 447 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 10 523 subscribers.
According to the latest data from 26 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -63 over the last 30 days and by -1 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 19.12%. Within the first 24 hours after publication, content typically collects 9.47% reactions from the total number of subscribers.
- Post reach: On average, each post receives 2 012 views. Within the first day, a publication typically gains 997 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 15.
- Thematic interests: Content is focused on key topics such as php, laravel, пхпшника, artisan, api.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Все самое полезное для пхпшника в одном канале.
По рекламе: @proglib_adv
Учиться у нас: clc.to/M561SQ
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b”
Thanks to the high frequency of updates (latest data received on 27 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
docker compose up -d --no-deps api
— Пересобрать и запустить: docker compose up -d --no-deps --build api
— Посмотреть логи только одного: docker compose logs -f api
— Рестарт без пересоздания: docker compose restart api
— Масштабировать: docker compose up -d --scale worker=3
💡 restart не подхватывает изменения в docker-compose.yml или Dockerfile, для этого нужен up -d. Если обновили env-переменные или порты — только up -d применит изменения.
Библиотека пхпшникаuse function MongoDB\Driver\Monitoring\addSubscriber;
public function boot(): void
{
addSubscriber(new MongoCommandSubscriber());
}
Дальше драйвер сам отдаёт операцию (find, aggregate, insert), коллекцию и тайминг, без правок прикладного кода. Запросы дольше порога помечаются is_slow.
Чтобы коллекция логов не разрасталась до неприличия, навешивают TTL-индекс на created_at с expireAfterSeconds: 604800 (неделя). Mongo сам подметает старьё.
🔗 Подробнее
Библиотека пхпшника
#how_toФайлы и навигация: ls, cd, mkdir, rm, mv, cp. База, без которой ты даже логи не найдешь. Поиск и чтение: find, grep, cat. Твои лучшие друзья при дебаге гигабайтных логов в поисках одной упавшей транзакции. Управление процессами: ps, kill, top. Экстренный набор хирурга, когда какой-то процесс потёк по памяти и положил всю ноду. Права и сеть: chmod, ping, ifconfig.А как у вас отношения с консолью? ❤️ — Живу в терминале 🔥 — Знаю базу 🔹 Курс «Основы IT для непрограммистов» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🏃♀️ Азбука айтишника #ликбез
Руководил разработкой ML-моделей в финтехе с экономическим эффектом более 100 млн ₽🟣 Запуск продуктов на 6.000+ пользователей
Антон строит сервисы, которыми пользуются тысячи людей в реальном проде.🟣 Ускоряет разработку
Оптимизировал ML-пайплайны и кратно сократил время от начала разработки до релиза📚 Где Антон черпает знания (рекомендации эксперта): - X (Twitter) — главный источник новостей. Рекомендую блог Бориса Черни (создателя Claude Code) — там база про использование ИИ в разработке. - Нетворкинг в ТГ: чаты LLM под капотом и AI-чат — здесь можно найти ответ почти на любой технический вопрос. - Новости AI: каналы Сиолошная и Denis Sexy IT. На курсе Agentops Антон учит строить «неубиваемый» бэкенд: работать с очередями, таймаутами и балансировкой нагрузки, чтобы ваши агенты работали стабильно 24/7. 🎁 Майские СКИДКИ в Proglib Academy! До конца мая на все курсы академии (включая AgentOps и разработку ИИ-агентов) действует скидка -40%. Это лучший момент, чтобы войти в AI-разработку под присмотром практиков. Узнать больше о программе и обучении у Антона: 👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса Продолжаем знакомить вас с командой? 👍 — Да, ждем новых лиц 🔥 — Пойду подпишусь на каналы из списка Антона 🏃♀️ Proglib Academy
opcache.enable=1 opcache.preload=/var/www/app/preload.php opcache.preload_user=www-data opcache.memory_consumption=256 opcache.max_accelerated_files=20000 opcache.validate_timestamps=0validate_timestamps=0 → на проде файлы не меняются между деплоями. Не тратим syscall на stat() каждого файла. Сброс кэша через рестарт FPM (Deployer сделает сам). 2️⃣ Пишем preload.php правильно
// ❌ так делать нельзя
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/var/www/app/vendor')
);
foreach ($files as $file) {
if ($file->getExtension() === 'php') {
opcache_compile_file($file->getRealPath());
}
}
Проблема: интерфейсы, трейты, абстрактные классы → порядок загрузки важен, одна битая зависимость = FPM не стартует.
// ✅ через Composer class map + мягкий fallback
// preload.php
require __DIR__ . '/vendor/autoload.php';
$classMap = require __DIR__ . '/vendor/composer/autoload_classmap.php';
$ignore = [
'/Tests/', '/test/', '/fixtures/', '/stub/',
'/migrations/', '/seeders/', '/factories/',
];
foreach ($classMap as $class => $file) {
foreach ($ignore as $pattern) {
if (str_contains($file, $pattern)) continue 2;
}
try {
if (!class_exists($class, false)
&& !interface_exists($class, false)
&& !trait_exists($class, false)
&& !enum_exists($class, false)
) {
require_once $file;
}
} catch (\Throwable) {
// класс не загрузился — пропускаем, не роняем FPM
}
}
class_exists($class, false) → false отключает автолоад. Проверяем, не загружен ли класс уже по цепочке зависимостей.
3️⃣ Для Laravel берём готовое
composer require laragear/preload php artisan preload:generateПакет анализирует opcache_get_status() на работающем приложении и генерирует preload-список из реально используемых классов, не из всего vendor.
// config/preload.php
return [
'condition' => true,
'memory_limit' => 64, // MB под прелоад
'include' => [],
'exclude' => [
'Illuminate\Support\Facades\*',
],
'overwrite' => true,
];
Фасады исключаем, они резолвятся лениво через контейнер, прелоад им мешает.
4️⃣ Проверяем, что всё работает
// диагностика из CLI не работает, только через FPM
// создаём роут или скрипт
$status = opcache_get_status();
$preload = $status['preload_statistics'] ?? [];
echo "Preloaded classes: " . count($preload['classes'] ?? []) . PHP_EOL;
echo "Preloaded funcs: " . count($preload['functions'] ?? []) . PHP_EOL;
echo "Memory used: " . round($preload['memory_consumption'] / 1024 / 1024, 2) . " MB" . PHP_EOL;
Важно: php -r "opcache_get_status();" в CLI покажет пустоту. Прелоад живёт только в памяти FPM-мастера.
5️⃣ Интегрируем в деплой
// deploy.php (Deployer)
task('php-fpm:reload', function () {
run('sudo systemctl reload php8.3-fpm');
});
after('deploy:symlink', 'php-fpm:reload');
reload, не restart. Reload делает graceful: мастер-процесс перечитывает конфиг и прелоад, старые воркеры дорабатывают текущие реквесты. Zero downtime.
6️⃣ Подводные камни
— Память: прелоад жрёт shared memory. 2000 классов ≈ 30–50 MB. Если memory_consumption мал, часть классов молча не загрузится
— Наследование: если прелоадите дочерний класс, родитель должен быть загружен раньше. Composer classmap решает это, ручной glob — нет
— Enum + PHP 8.1+: backed enum'ы с интерфейсами иногда падают при прелоаде. Если ловите segfault при старте FPM — исключайте enum'ы и обновляйтесь
— Xdebug: прелоад несовместим с xdebug. На dev-окружении выключайте opcache.preload
📌 Итог
Preloading — бесплатный буст перформанса без изменения кода. Но только если прелоадите то, что реально используется, обрабатываете ошибки загрузки и не забываете reload FPM при деплое. В связке с Deployer это одна строка в пайплайне.
Библиотека пхпшникаopcache.enable=1 opcache.preload=/var/www/app/preload.php opcache.preload_user=www-data opcache.memory_consumption=256 opcache.max_accelerated_files=20000 opcache.validate_timestamps=0
validate_timestamps=0 — на проде файлы не меняются между деплоями. Не тратим syscall на stat() каждого файла. Сброс кэша — через рестарт FPM (Deployer сделает сам).
2️⃣ Пишем preload.php правильно
Наивный подход — загрузить всё подряд. Получите fatal при старте FPM.
php
// ❌ так делать нельзя
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/var/www/app/vendor')
);
foreach ($files as $file) {
if ($file->getExtension() === 'php') {
opcache_compile_file($file->getRealPath());
}
}
Проблема: интерфейсы, трейты, абстрактные классы — порядок загрузки важен. Одна битая зависимость = FPM не стартует.
php
// ✅ через Composer class map + мягкий fallback
// preload.php
require __DIR__ . '/vendor/autoload.php';
$classMap = require __DIR__ . '/vendor/composer/autoload_classmap.php';
$ignore = [
'/Tests/', '/test/', '/fixtures/', '/stub/',
'/migrations/', '/seeders/', '/factories/',
];
foreach ($classMap as $class => $file) {
foreach ($ignore as $pattern) {
if (str_contains($file, $pattern)) continue 2;
}
try {
if (!class_exists($class, false)
&& !interface_exists($class, false)
&& !trait_exists($class, false)
&& !enum_exists($class, false)
) {
require_once $file;
}
} catch (\Throwable) {
// класс не загрузился — пропускаем, не роняем FPM
}
}
class_exists($class, false) — false отключает автолоад. Проверяем, не загружен ли класс уже по цепочке зависимостей.
3️⃣ Для Laravel — берём готовое
bash
composer require laragear/preload php artisan preload:generateПакет анализирует opcache_get_status() на работающем приложении и генерирует preload-список из реально используемых классов. Не из всего vendor. php
// config/preload.php
return [
'condition' => true,
'memory_limit' => 64, // MB под прелоад
'include' => [],
'exclude' => [
'Illuminate\Support\Facades\*',
],
'overwrite' => true,
];
Фасады исключаем — они резолвятся лениво через контейнер, прелоад им мешает.
4️⃣ Проверяем, что всё работает
php
// диагностика из CLI не работает, только через FPM
// создаём роут или скрипт
$status = opcache_get_status();
$preload = $status['preload_statistics'] ?? [];
echo "Preloaded classes: " . count($preload['classes'] ?? []) . PHP_EOL;
echo "Preloaded funcs: " . count($preload['functions'] ?? []) . PHP_EOL;
echo "Memory used: " . round($preload['memory_consumption'] / 1024 / 1024, 2) . " MB" . PHP_EOL;
Важно: php -r "opcache_get_status();" в CLI покажет пустоту. Прелоад живёт только в памяти FPM-мастера.
5️⃣ Интегрируем в деплой
php
// deploy.php (Deployer)
task('php-fpm:reload', function () {
run('sudo systemctl reload php8.3-fpm');
});
after('deploy:symlink', 'php-fpm:reload');
reload, не restart. Reload делает graceful: мастер-процесс перечитывает конфиг и прелоад, старые воркеры дорабатывают текущие реквесты. Zero downtime.
6️⃣ Подводные камни
— Память: прелоад жрёт shared memory. 2000 классов ≈ 30–50 MB. Если memory_consumption мал — часть классов молча не загрузится — Наследование: если прелоадите дочерний класс, родитель должен быть загружен раньше. Composer classmap решает это, ручной glob — нет — Enum + PHP 8.1+: backed enum'ы с интерфейсами иногда падают при прелоаде. Если ловите segfault при старте FPM — исключайте enum'ы и обновляйтесь — Xdebug: прелоад несовместим с xdebug. На dev-окружении выключайте opcache.preloadenum TaskStatus: string
{
case TODO = 'todo';
case IN_PROGRESS = 'in_progress';
case DONE = 'done';
}
#[ORM\Column(length: 50, enumType: TaskStatus::class)]
private TaskStatus $status = TaskStatus::TODO;
Достаточно передать TaskStatus::cases() в Twig и новый статус добавится одной строкой в Enum. Никакой правки шаблонов и магических строк (Doctrine сам сериализует значения в varchar).
Во второй части туториала будет немного нативного HTML5 DnD и Turbo Streams через Mercure для синхронизации между вкладками.
🔗 Подробнее
Библиотека пхпшника