Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.1K subscribers
1.5K photos
24 videos
26 files
4.21K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
⚡️ How to: асинхронная обработка в Symfony Messenger

Современные пользователи не хотят ждать, пока ваш сервер «пережёвывает» тяжёлые задачи — будь то генерация отчёта, обработка видео или загрузка большого файла. Решение простое: отправить работу в фон. И здесь на сцену выходит Symfony Messenger.

🚨 Проблема синхронного подхода

Каждый запрос ждёт полного выполнения всех действий.
Отправка письма или генерация PDF может «подвесить» вкладку браузера.
Долгие запросы блокируют сервер и мешают обслуживать других пользователей.

Решение — Messenger

Symfony Messenger реализует паттерн Producer-Consumer:
🔸 Message — простая PHP-DTO с данными (например, ProcessVideoMessage).
🔸 Handler — сервис с бизнес-логикой обработки.
🔸 Transport — очередь (RabbitMQ, Redis, Doctrine, SQS).
🔸 Worker — отдельный процесс, который слушает очередь и обрабатывает сообщения.

Таким образом, пользователь получает быстрый отклик, а тяжёлая работа уходит в фон.

🎬 Пример: параллельная обработка видео
1. Разбиваем видео на чанки и отправляем каждую часть отдельным сообщением.
2. 10 воркеров параллельно кодируют/обрабатывают куски.
3. Событие VideoChunkProcessed сигнализирует о завершении.
4. После обработки всех чанков запускается CombineVideoChunksMessage, который объединяет куски в готовый файл через FFmpeg.

🚀 Чем это хорошо
🔹 Масштабируется горизонтально: чем больше воркеров, тем быстрее работа.
🔹 Гарантированная устойчивость — сообщения не теряются.
🔹 Архитектура становится модульной и предсказуемой.

👉 Читать статью

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍1🥰1
💥 Весь октябрь -40% на курсы для разработчиков в proglib.academy

Бери знания под свой стек:
Python | алгоритмы | математика для Data Science | архитектура кода.

Пока одни ждут «идеальный момент», другие просто учатся.
А потом берут ваши офферы.


⚡️ Пока скидка действует, апдейтни свои навыки
⌨️ Топ-вакансий по PHP за неделю

Senior PHP разработчик — от 250 000 до 320 000 ₽, Удалёнка (Москва)

PHP dev — от 150 000 до 300 000 ₽, Офис (Казань)

Team Leader / Lead PHP Developer — от 5500 до 6500 $, Удалёнка (Москва)

PHP Developer — от 250 000 ₽, Удалёнка (Москва)

➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
👍1
Bash-скрипт на максималках: как работает менеджер задач для управления 300 скриптами

Статья рассказывает историю о том, как в команда столкнулась с «проклятьем масштаба» при работе с сотнями скриптов для загрузки и обработки данных из десятков открытых источников.
Изначально запуск был построен на cron и bash-скриптах, но со временем процесс стал занимать слишком много времени и стал крайне сложным в поддержке. Готовых решений в 2018 году (например, Airflow) для их специфики не нашлось, поэтому команда спроектировала собственный TaskManager.

По сути, это статья о том, как инженерная проблема управления «зоопарком скриптов» превратилась в задачу по теории графов, и как алгоритмический подход дал решение, которое оказалось масштабируемым и долгоживущим.

🔗 Хабр

Библиотека пхпшника
1👍1😢1
🛠 PhpStorm-лайфхак: Быстрый доступ к любой ветке Git

Если ты часто переключаешься между ветками в проектах, вот способ сделать это максимально быстро прямо из PhpStorm, без лишних кликов мышкой.

🔍 Как это работает:

1. Нажми Ctrl+Shift+A (или Cmd+Shift+A на macOS).

2. Начни вводить Git: Checkout и выбери нужную команду.

3. Введи название ветки и нажми Enter — мгновенный checkout!

⚡️ Почему это круто:

🔸 Быстро переключаешься между ветками без поиска в списках

🔸 Нет необходимости помнить точные команды Git в терминале

🔸 Удобно при работе с большим количеством веток

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
Внутреннее устройство PHP-массива (HashTable)

На поверхности array — просто «ключ-значение». Под капотом — компактная hash-таблица Zend Engine с режимами для разных сценариев и сохранением порядка вставки. Официально: «array в PHP — упорядоченная карта».

📦 Базовая структура
PHP хранит массив как HashTable (Zend): есть таблица хеш-слотов и массив «бакетов» с элементами. С PHP 7 реализация компактная: меньше аллокаций и память/кэш-локальность лучше по сравнению с PHP 5.

Два режима работы:
Packed — когда ключи 0..n-1 без дыр, работает как плотный список.
Mixed — как ассоциативный словарь (строковые и целочисленные ключи). Переключение прозрачно.

🔑 Хеш и распределение
Строковые ключи хешируются внутренней функцией движка; индекс вычисляется по маске таблицы (степень двойки → быстрый & (n-1)).
Числовые ключи идут напрямую как индексы (в packed) или как int-ключи (в mixed).
Порядок обхода = порядок вставки.

🌊 Коллизии
Коллизии разрешаются через связные цепочки внутри хеш-слотов (указатели между бакетами). Деревьев, как в Java 8, нет — в худшем случае поиск линейный по цепочке. На практике за счёт маски/resize средняя сложность операций остаётся O(1).

⚡️ Ресайзинг
При росте элементов таблица увеличивается (обычно ×2), элементы перераскладываются в новые слоты по той же маске. Это дорогая операция, но амортизированно остаётся дешёвой.

📊 Производительность (в среднем)
isset($a[$k]) / чтение / запись — O(1); в крайне «плохих» случаях — O(n) из-за цепочек. Хорошее распределение ключей и разумный размер таблицы держат вас в O(1).

⚖️ Важные нюансы
Порядок важен: массив — упорядоченная структура (вставочный порядок сохраняется).
Типы ключей: только int и string. Числовые строки автоматически приводятся к int (например, «8»8; «08» останется строкой). Объекты/массивы как ключи — нельзя.
Копирование при записи (COW): присваивание массива создаёт «разделяемую» копию; реальное копирование — при первой модификации. Это экономит память и часто снимает страх «дорого скопировал».
Итерация не fail-fast: foreach не бросает исключения при изменении массива во время обхода; поведение «слабо-консистентное», ориентируйтесь на читаемость и аккуратность. (Специального fail-fast механизма как в JDK нет; официальная дока описывает лишь общие правила итерации массива.)

🧮 Когда массив — не то, что нужно
В PHP массив не принимает объекты как ключи. Для кейсов «ключ = объект» есть специальные структуры:
SplObjectStorage — map/set для объектов-ключей. Удобно для учёта уникальных объектов, привязки метаданных к объекту.
WeakMap (PHP 8+) — как map «объект → значение», но не удерживает объект от GC: когда объект больше нигде не живёт, пара удаляется из карты. Идеально для кэшей, завязанных на жизненный цикл объекта.

🔍 Частые подводные камни
«Почему «123» стал ключом 123?» — потому что numeric string → int по правилам массива. Если хотите именно строковый ключ, сделайте его явно невалидной «десятичной» формой (например, «+123» или «00123»), или храните в другой структуре.
«Почему копия массива не дорога?» — из-за Copy-On-Write: реальный дубликат появится только при изменении.

Библиотека пхпшника

#php_азбука
👍111
💻 ШПАРГАЛКА по Git для разраба

12 ключевых команд, которые составляют основу рабочего процесса Git.

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👍1
⭐️ Вы можете использовать readStream и writeStream, чтобы скопировать файл (или все файлы из папки) с одного диска на другой, сохраняя низкое использование памяти.
Как вам функция?

По словам автора, это лучшее что он написал за 20 лет карьеры

💬 А у вас в запасе есть такие динозавры? Делитесь в коментах👇

Библиотека пхпшника

#байтовый_юмор
👍17🌚3🤔2
📚 Release It!: Design and Deploy Production-Ready Software, 2nd Edition (2018)

Эта книга — как дневник боли разработчиков, только без слёз (почти). Автор рассказывает, как не допустить, чтобы твой код превратился в ночной кошмар DevOps-а.

В обновлённом издании рассказывается о создании современных систем — более крупных, сложных и в значительной степени виртуализированных.

Что внутри:

⚡️ Антипаттерны стабильности и как их обходить

☁️ Про DevOps, микросервисы и облака без боли

💥 Хаос-инжиниринг (да, ломать специально, чтобы не рухнуло потом)

🔄 Нулевой даунтайм и непрерывная доставка

🔗 Скачать
🤞 Поддержать канал бустом

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
2
💻 Подборка новостей по PHP за неделю:​

🔹 Laravel 12.32 — добавлен метод Http::batch() для пакетных HTTP-запросов, метод after() для тонкой настройки rate limiting по ответам, а также поддержка callback’ов при сбое batch-задач.

🔹 Craft CMS переходит на Laravel — на конференции Dot All объявлено, что Craft CMS 6 будет работать на Laravel, что обещает мощную экосистему и ускорение разработки.

🔹 Новая команда setup в Laravel — теперь установка проекта стала проще: одной командой Composer можно выполнить все основные шаги по настройке окружения.

🔹 Symfony 29 сентября — 5 октября 2025 — в Symfony 7.4 устарели XML-конфигурации для сервисов и маршрутов, добавлены PHP-атрибуты для консольных аргументов и улучшен HTTP-клиент с кэшированием.

Библиотека пхпшника

#свежак
💡Совет по Laravel: хук в события аутентификации

Знаешь ли ты, что в Laravel модуль аутентификации уже «на борту» поставляется с целой кучей событий, на которые ты можешь «подписаться»? Независимо от того, пытается пользователь войти или терпит неудачу, ты можешь отлавливать эти моменты и делать с ними что угодно 🚀

Библиотека пхпшника

#vardump
👍141
Создание реактивных систем на PHP: когда асинхронность и потоки имеют смысл

Когда-то «асинхронный PHP» звучало как оксюморон.
Но времена «запрос-ответ и умер» уходят — современным приложениям нужно реагировать в реальном времени: стримить данные, обновлять дашборды, обрабатывать события.

🧩 Раньше: PHP жил в блокирующем мире — каждая операция ждала предыдущую. Просто, но медленно.
⚙️ Теперь: движки вроде ReactPHP и Swoole позволяют запускать корутины, слушать события и держать процесс живым.

📈 Что это даёт:
— Реактивные API и чаты без Node.js
— Потоковую обработку логов и телеметрии
— Масштабирование без взрывного роста потоков
— Меньше ожиданий, больше отклика

💡 Но важно помнить:
Async не делает код быстрее — он делает ожидание дешевле.
Он не для CRUD-панелей, а для систем, где данные текут потоком.

🕵️‍♂ А ещё — вам придётся дружить с логированием, контролем памяти и дисциплиной.
Асинхронщина не про хаос, а про осознанную реактивность.

🔗 Medium

Библиотека пхпшника
1
This media is not supported in your browser
VIEW IN TELEGRAM
В proglib.academy — Глобальная распродажа знаний ‼️

💥 Весь октябрь –40% на те курсы, которые выбирают чаще всего.

Курсы с практикой, без воды и пафоса.
Просто берёшь и делаешь апгрейд.


👉 Успей забрать свой курс на proglib.academy
🥱6🙏1🌚1
Что будет выведено в результате работы кода?
Введение в MongoDB и настройка Laravel-MongoDB

В статье показано, как связать Laravel с MongoDB и построить полноценный блог с полиморфными моделями и поиском — без боли SQL-таблиц и JOIN-ов.

⚙️ Что внутри
Разбор основ MongoDB и её преимуществ над SQL (динамическая схема, отсутствие NULL, масштабирование из коробки).
Настройка Laravel-проекта с подключением MongoDB Atlas.
Создание полиморфных моделейPost, Article, Tutorial — которые живут в одной коллекции contents, но имеют разные поля.
Реализация CRUD-операций, поиска и категорий контента.
Использование MongoDB-фишек — массивов, вложенных документов, агрегаций и индексов.

💡 Главное преимущество
MongoDB позволяет хранить разные типы контента в одной коллекции без миграций и строгих схем.
Добавляете поле в модель — и оно уже работает.

📈 В итоге: Laravel остаётся удобным как Eloquent, но становится гибким, как NoSQL.
А блог из туториала — готовая база для любых CMS или knowledge-систем.

👉 Читать статью

Библиотека пхпшника
🎉 Filament v4.1 — апдейт, который приятно почувствовать руками

Команда Filament выкатала свежий релиз v4.1 — и это не просто мелкий патч.
🔧 156 багфиксов и 💡 39 новых фич сделали фреймворк ещё гибче и приятнее для разработки.

💥 Что нового

🧭 Новый макет панели без Topbar
Теперь можно полностью убрать верхнюю панель (->topbar(false)), перенести поиск и меню пользователя в боковую часть — и получить максимум вертикального пространства.
Отлично подойдёт для дашбордов и кастомных админок.

🧱 Rich Editor стал взрослее
🖋️ Grid Tool — вставляйте адаптивные сетки (до 12 колонок) прямо в контент.
🎨 Text Color Tool — добавляйте цвет текста из палитры Tailwind или своих кастомных оттенков, с автоматической адаптацией под тёмную тему.

📋 Компактные таблицы и повторители
Repeater теперь поддерживает компактный режим (->compact()), который делает поля аккуратными внутри таблицы.
А RepeatableEntry получил табличный вывод — можно красиво отображать данные, иконки и изображения в ячейках.

🚫 Новый компонент Empty State
Добавляйте дружелюбные пустые состояния с иконкой, описанием и кнопкой действия:

EmptyState::make('No users yet')->description('Get started by creating a new user.')

Больше никаких унылых «ничего не найдено».

🧩 Экосистема плагинов растёт
🔗 Уже 224 плагина для Filament v4!
Из свежих фаворитов:
Passkeys — вход без пароля
Prizm Theme — новый стильный UI
Header Select — улучшенные селекты в таблицах

🚀 Обновиться можно одной командой:

composer update filament/*

Библиотека пхпшника

#свежак
2🔥2