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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
📚 Expert Linux Administration Guide: Administer and Control Linux Filesystems, Networking, Web Server, Virtualization, Databases, and Process Control (2022)

Все мы знаем, что Linux — это не просто система, а целая философия. Но вот беда: админить её часто приходится по принципу «гуглишь до рассвета, молишься до обеда».

Книга обещает превратить хаос в порядок. Тут всё, что нужно начинающему (и не очень) админу: от файловых систем и сетевых настроек до веб-серверов, виртуализации и восстановления базы после того, как кто-то случайно дропнул ее на проде.

📌 Что внутри:

🔴Как настраивать DNS, почтовики и Squid так, чтобы они не падали каждые выходные.

🔴Фаерволы, балансировка и «да кто там опять открыл 22 порт наружу?!»

🔴Бэкапы и восстановление (да-да, то самое, про которое все вспоминают только когда уже поздно)

🔴Виртуализация, мониторинг, апдейты пакетов и прочие радости.

🔗 Скачать

🐸 Книги для программистов
Please open Telegram to view this post
VIEW IN TELEGRAM
5
📎 Разница между merge и rebase в git

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8👍1🌚1
🚀 Курс «ИИ-агенты для DS-специалистов» уже стартовал

Первый вебинар успешно прошёл, участники уже начали разбираться, как использовать ИИ-агентов в реальных проектах.

Но всё самое интересное только начинается!

🔥 Впереди 4 мощных занятия — с практикой, инсайтами и разбором кейсов от экспертов.

💸 Сейчас действует специальная цена → 69.000 ₽ вместо 79.000 ₽.

Осталось всего 4 места.

Не упустите шанс прокачаться в том, что будет определять будущее индустрии.

👉 Забронировать место на курсе
😁5😢2
💻 Подборка новостей по PHP за неделю:​

🔹 Laravel Starter Kit — Nuno Maduro представил новый строгий стартовый набор для проектов. Он включает строгую проверку типов, форматирование и статический анализ на максимальных настройках.

🔹 PHP 8.5.0 RC 1 — вышел первый релиз-кандидат PHP 8.5.0, следующий шаг перед финальным релизом в ноябре. Также опубликованы багфикс-релизы PHP 8.3.26 и PHP 8.4.13.

🔹 Symfony 7.3.4 — вместе с ним выпущены версии 6.4.26 и 7.3.4.

🔹 Symfony 22–28 сентября 2025 — развитие Symfony 7.4 продолжается: добавлены новые функции и внесены депрекейшены перед релизом в ноябре.

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

#свежак
1🔥1😢1
💡Совет по Laravel: Статистика обработчика HTTP-клиента

HTTP-клиент Laravel использует Guzzle, предоставляя доступ к статистике по каждому запросу, включая общее время, скорость загрузки и многое другое 🚀

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

#vardump
👍1
🔥 Saga pattern в PHP-микросервисах: как приручить хаос распределённых транзакций

Представьте: вы заказываете пиццу через приложение. В этот момент включается цепочка микросервисов: проверяется аккаунт, блокируются деньги, резервируется товар, создаётся заказ, уведомляется курьер, списываются бонусы. Всё идёт гладко… пока один из шагов не ломается. Что делать?

👉 Здесь на сцену выходит Saga pattern — способ координации распределённых транзакций без глобального коммита. Он превращает «монолитный» ACID-подход в управляемую серию шагов, каждый из которых либо завершается успешно, либо компенсируется обратным действием.

⚖️ Откуда растут ноги
В распределённых системах невозможно одновременно держать:
🔸 Consistency (согласованность),
🔸 Availability (доступность),
🔸 Partition Tolerance (устойчивость к сетевым сбоям).

CAP-теорема заставляет выбирать. Микросервисы обычно выбирают доступность + устойчивость, жертвуя мгновенной консистентностью.
Saga — это про eventual consistency и отказ от «всё или ничего» в пользу гибкой компенсации.

🧩 Основные принципы Saga

Локальные транзакции — каждая операция выполняется внутри своего сервиса и своей базы.
Компенсирующие действия — для каждого шага определяется обратное (отмена заказа, возврат средств, снятие резерва).
Pivot-операция — «точка невозврата», после которой процесс обязан завершиться (например, списание средств или отправка товара).
Идемпотентность — шаги должны безопасно повторяться (например, повторный возврат денег не должен удвоить баланс).
Наблюдаемость — все шаги саги должны логироваться и мониториться как единый процесс.

🕺 Хореография vs 🎼 Оркестрация

Хореография (event-driven):
Сервисы реагируют на события друг друга («создан заказ» → «оплата прошла» → «товар зарезервирован»).
Плюсы: нет центрального управляющего, меньше точек отказа, естественная асинхронность.
Минусы: сложно тестировать и дебажить, растут циклы и зависимости.

Оркестрация (central coordinator):
Есть управляющий компонент, который пошагово запускает сервисы и следит за компенсацией.
Плюсы: прозрачность, контроль, простая трассировка.
Минусы: единая точка отказа, риск узкого места.

🛡️ Типовые проблемы и решения

Lost update: несколько саг меняют один ресурс. Решение — семантические блокировки или оптимистические версии.
ABA-проблема: значение успело измениться A→B→A. Решение — векторные часы, версии.
Dirty read: один сервис читает «грязные» данные другого. Решение — откладывать коммиты или использовать операции как очередь.
Подвисшие саги: шаг завис или умер. Решение — таймауты + процесс восстановления.

🏗️ Что важно в проде
Чётко определённые компенсации для каждого шага.
Хранение состояния саги (статус, завершённые шаги, таймстемпы).
Автовосстановление: незавершённые саги нужно уметь продолжать или компенсировать.
Мониторинг и алерты: метрики (saga.started, saga.completed, saga.failed).
Property-based тесты:
либо все шаги завершены,
либо все выполненные шаги компенсированы.

А вы бы выбрали хореографию событий (больше свободы, но сложнее отлаживать) или центрального дирижёра (прозрачность и контроль, но SPOF)?

🔗 Читать статью

Библиотека пхпшника
👍103
Что будет выведено в результате работы скрипта?
🤔2
🔥 PHP 8.5: релиз, который радует мелочами

Совсем скоро выходит PHP 8.5, и это именно та версия, где нет «вау»-революции, но есть куча приятных мелочей, которые сделают жизнь разработчика проще. Давайте разберёмся, что нового.

➡️ Pipe Operator

Теперь можно писать цепочки вызовов без временных переменных.
Код читается слева направо — и становится чище.

🛑 Атрибут #[NoDiscard]

Если функция возвращает значение, которое нельзя игнорировать — PHP предупредит. Это реально спасает от багов, когда кто-то «забыл» использовать результат вызова.

🔒 Closures в константах

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

🧰 Array helpers

array_first() и array_last() — наконец-то нормальные функции для получения первого и последнего элемента массива. Без возни с указателем.

🏷 Атрибуты для глобальных констант

Теперь константы можно помечать метаданными (например, #[Deprecated]). Удобно для больших пакетов и конфигураций.

⚡️ Новый get_exception_handler()

Наконец-то можно посмотреть, какой exception handler у вас сейчас установлен. Полезно для фреймворков и глобальной обработки ошибок.

🌍 Intl List Formatter

Форматирует списки по правилам локали: "Lisbon, Porto, and Coimbra". Для интернационализации — находка.

🖥 Улучшения в CLI

php -i --diff — показывает, чем ваша php.ini отличается от дефолта.

Константа PHP_BUILD_DATE — точная дата сборки бинаря.

Final Property Promotion — можно делать отдельные свойства final.

Чуть более удобные ошибки и варнинги в CLI.

😀 Это та версия, которая не ломает привычки, а аккуратно убирает шероховатости. Если вы пишете на PHP каждый день — разницу почувствуете сразу.

🙂 Вопрос к вам: какая из фич PHP 8.5 войдёт в ваш код первой?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤‍🔥1
🚀 Laravel MCP: новая библиотека для AI-интеграций в Laravel

недавно в публичную бету вышел Laravel MCP — библиотека, которая позволяет разворачивать Model Context Protocol (MCP)-серверы прямо внутри вашего Laravel-приложения.

🔎 Что такое MCP?

Model Context Protocol (MCP) — это открытый стандарт, который помогает AI-ассистентам (ChatGPT, Claude, Cursor и др.) безопасно подключаться к внешним сервисам и данным. Вместо того чтобы писать отдельные интеграции для каждого ИИ, MCP предлагает универсальный API для агентов.

Laravel MCP поддерживает три ключевых примитива протокола:
🔸 Tools — выполнение действий: от генерации инвойсов до запуска команд.
🔸 Resources — предоставление данных и контента (документы, профили, отчёты).
🔸 Prompts — шаблоны для типовых запросов (ревью кода, модерация контента).

🛠️ Возможности Laravel MCP
Servers: точка входа для взаимодействия с AI.
Поддерживаются web-серверы (HTTP для удалённых клиентов) и локальные (artisan-команды для девелопмента).
Tools: выносите бизнес-логику наружу — AI сможет запускать её по запросу пользователя.
Resources: отдавайте данные приложения в структурированном виде.
Prompts: формируйте повторно используемые шаблоны общения с ИИ.

🔐 Безопасность
Laravel MCP поддерживает два подхода к защите web-серверов:
OAuth 2.1 (Laravel Passport) — надёжный вариант для продакшена.
Token-based (Laravel Sanctum) — простой и лёгкий способ защиты.
Дополнительно можно встраивать авторизацию прямо в обработчики инструментов и ресурсов.

📦 Установка
Требования: PHP 8.1+, Laravel 10/11/12.
Установка: composer require laravel/mcp.
После — публикуете routes/ai.php, где настраиваются MCP-сервера.

🔬 Тестирование
🔹 MCP Inspector: CLI-утилита для проверки аутентификации и отладки MCP-сервера.
🔹 Unit tests: есть встроенные ассершены для проверки ответов и симуляции запросов.

💡 Где применять
🔹 Для разработчиков: генерация кода, запуск artisan-команд, автоматизация тестов.
🔹 Для бизнеса: AI-инвойсинг, управление пользователями, публикация контента.
🔹 В энтерпрайзе: интеграция с CRM/ERP, автоматическая обработка заявок, предиктивная аналитика.
🔹 Для данных: безопасный доступ к профилям, заказам и сторонним API прямо из AI-чатов.

⚡️ Laravel MCP превращает Laravel-приложение в «AI-совместимый» сервис. Теперь вместо кастомных интеграций можно один раз поднять MCP-сервер и позволить ассистентам напрямую использовать ваши бизнес-процессы.

👉 Вопрос: какие функции вы бы первыми открыли для LLM через MCP — генерацию кода, работу с базой или бизнес-логику?

🗂️ Документация

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

#инструменты
🥱83
⚡️ 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