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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
💻 Хочешь MacBook Pro? Просто начни учиться!

Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!

Всё просто:

— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.

📚 Выбирай свой курс:

▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.

👉 Участвовать в розыгрыше
🌚1
🧩 Расширенные паттерны для Symfony HttpClient: потоковая передача, ретраи и отказоустойчивость

Если вы хоть раз писали $client->request('GET', ...) и $response->toArray(), значит, уже пользовались symfony/http-client.
Для простых случаев этого хватает.

Но реальность другая:
– 100 API-эндпоинтов нужно получить за секунды, а не минуты
– JSON на 500 МБ не должен взорвать память
– API периодически “флапает”, а приложение должно выжить
– токен OAuth2 живёт 60 минут — и должен обновляться сам

💡 И тут выясняется, что HttpClient — не просто обёртка над curl, а мощный инструмент для сложных систем.

⚡️ 1. Конкурентные запросы через stream()


Обычный foreach делает запросы последовательно:
10 запросов × 300 мс = 3 сек.

С stream() всё иначе — запросы идут параллельно, и общее время ≈ самому медленному из них.
foreach ($productIds as $id) {
$responses[$id] = $client->request('GET', "products/$id");
}
foreach ($client->stream($responses) as $r => $chunk) {
if ($chunk->isLast()) $prices[] = $r->toArray()['price'];
}


👉 10 запросов за ~300 мс вместо 3 секунд.

🧠 2. Потоковый парсинг JSON (новинка Symfony 7.3)

symfony/json-streamer позволяет читать огромные JSON-файлы без загрузки их целиком в память.

composer require symfony/json-streamer


foreach ($streamReader->read($response, Type::list(Type::object(ProductDto::class))) as $product) {
// обработка 2 млн объектов без OutOfMemory
}


🧱 3. Надёжность: Retry + Circuit Breaker

RetryableHttpClient сам повторит запросы при 503/504.
А если API “упало” — кастомный CircuitBreakerClient отключает обращения на 60 секунд, чтобы не “молотить мёртвый сервис”.

🔐 4. Автоматический OAuth2

AccessTokenHttpClient берёт токен из кэша и обновляет его по необходимости.
Больше никаких ручных проверок if ($token->isExpired()).

🧪 5. Тестирование без сети

MockHttpClient с генератором позволяет точно проверить последовательность и данные запросов.
Тесты становятся детерминированными и быстрыми.

🔗 Ссылка на статью

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
symfony/polyfill-intl-idn

Что это
Это полифил от Symfony Polyfill, который добавляет поддержку функций idn_to_ascii и idn_to_utf8 для версий PHP, где расширение ext‑intl может быть не установлено или не включено.
На Packagist: пакет устанавливается как symfony/polyfill-intl-idn. packagist.org

Зачем нужен
🔸 Если ваша система работает без расширения ext-intl (или с урезанной его поддержкой), библиотека гарантирует, что вы всё равно сможете использовать функции преобразования международных доменов (IDN).
🔸 Обеспечивает кросс-версийную совместимость — особенно полезно, если код должен работать в разных окружениях, где могут быть разные версии PHP и разные расширения.

Основная функциональность
Обеспечивает функцию idn_to_ascii() — перевод домена в ASCII-представление (например, для международных доменов с нелатинскими символами).
Обеспечивает функцию idn_to_utf8() — обратный перевод из ASCII формы в UTF-8.

Установка
Можно просто добавить в проект через Composer:

composer require symfony/polyfill-intl-idn

Когда особенно полезна
🔹 В проектах, которые должны поддерживать работу на серверах с минимальными расширениями PHP.
🔹Когда нужно надёжно работать с доменами, содержащими не-ASCII символы (например, русские домены, домены на арабском, китайском и др.).
🔹 В библиотеках или пакетах, которые распространяются и должны работать на максимально широком диапазоне окружений.

👉 Github

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

#инструменты
👍1
🛒 Black Friday от Proglib.academy!

Только до 30 ноября — скидка 40% на ВСЕ курсы.

Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.

🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.

👉 Учиться со скидкой
🎲 How to: Генерировать случайные Enum-значения с Faker в PHP 8.1+

PHP 8.1 принес нативные Enum, а Faker — идеальный инструмент для генерации тестовых данных. Вместе они позволяют быстро и безопасно создавать реалистичные значения для сидов и фабрик.

В статье показано, как:
— определить Enum,
— установить и настроить Faker,
— сгенерировать случайные Enum-значения,
— использовать всё это в Laravel Factory.

Типобезопасно, просто и без хардкода. 🚀

🔗 Ссылка на статью

Библиотека пхпшника
🚀 PHP-лайфхак: Оптимизируйте автозагрузку с Composer

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

🔍 Что такое оптимизация автозагрузки в Composer

По умолчанию Composer формирует автозагрузчик так, чтобы было удобно в разработке — он может на лету проверять файловую систему, искать файлы классов и т.д. Но это добавляет накладные расходы при каждом запросе.

Чтобы ускорить автозагрузку, Composer предлагает несколько уровней оптимизации:

Уровень 1 — Class map generation: вместо PSR-4/PSR-0 правил генерируется готовая карта классов (classmap), что позволяет автозагрузчику сразу «знать», где находится файл.

Уровень 2/A — Authoritative class maps: означает, что если класс не найден в classmap — дальнейшем поиску по файловой системе не доверяют. Это ещё быстрее, но требует, чтобы все классы были заранее включены в карту.

Уровень 2/B — APCu cache fallback: использует APCu-кеш для кеширования “класс найден / не найден”, ускоряя автозагрузку без полного отключения файловой системы.

⚙️ Как правильно настроить

Вот шаги, которые можно выполнить в вашем проекте:

1. В composer.json добавьте в раздел "config":
"config": {
"optimize-autoloader": true
}


Это включает optimisation level 1.


2. При установке/обновлении запустите Composer с флагом -o / --optimize-autoloader (или -o):
composer install --no-dev -o


Если вы на продакшене — лучше исключить пакеты для разработки (--no-dev).


3. Для ещё большей оптимизации (если вы уверены, что структура проекта окончательная и классов добавляться не будет “по-ходу”):
composer dump-autoload --classmap-authoritative --no-dev


Это включает уровень 2/A.


4. Если доступен APCu, можно рассмотреть вариант 2/B:
composer install --optimize-autoloader --apcu-autoloader

Но тут нужно, чтобы APCu был установлен и настроен.

🧠 Когда это применять и на что обратить внимание

На продакшене — оптимизация автозагрузки почти всегда повышение производительности, особенно в больших проектах.

⚠️ В разработке — будьте осторожны: если вы часто добавляете/удаляете/переименовываете классы, оптимизированный classmap может “не видеть” новые файлы до повторного dump-autoload.

📂 Убедитесь, что все классы соответствуют PSR-4/PSR-0 и названы корректно — иначе могут быть проблемы при уровне 2 оптимизации.

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍7🙏1
🧪 Unit-тесты vs QA протестирует

Когда ответственность встречается с делегированием — рождается главный миф разработки.

🟣 Unit-тесты

— Баги находятся на этапе разработки
— Быстрый feedback loop
— Рефакторинг без страха
— Разработчик = ответственность за качество

🟣 QA протестирует

— Быстрее пишу код без тестов
— QA всё равно найдёт баги
— "Я же не тестировщик"
— Баги уходят в прод, но это не моя вина

💭 А в вашей компании есть правило «нет тестов — нет мержа»? Или «работает — не трогай»?

Голосуем реакциями:

👍 — Пишу unit-тесты перед коммитом
❤️ — Тесты есть, но не всегда
🤔 — QA справится, они для этого есть
🔥 — Продакшн и есть тестовая среда

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥20👍9🤔8🌚3
💬Еще с Laravel 8 появился Prunable. С его помощью вы можете удалять старые модели по расписанию.

Вам больше не нужно писать пользовательские команды

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

#vardump
🔥4
📘 Хочешь в Data Science, но есть пробелы в знаниях математики?

Мы сделали экспресс-курс «Математика для Data Science», который за 2 месяца даст тебе фундамент, без которого ни одна ML-модель не взлетит 🚀

Что тебя ждёт:
🔹 живые вебинары с экспертами (НИУ ВШЭ, SberAI, Wildberries&Russ);
🔹 практика в Python, квизы и проверка заданий экспертами;
🔹 матрицы, регрессии, вероятности и статистика: всё на примерах из реальных задач;
🔹 старт — 4 декабря.

🔥 Не упусти халяву: сейчас 40% до 30 ноября

👉 Записаться на курс
Forwarded from Библиотека программиста | программирование, кодинг, разработка
$ cat inventory.csv | column -t -s,

— простая команда на случай, когда надо быстро и в удобном формате прочитать CSV-файл в терминале 👩‍💻

Флаг -s указывает на использование запятых в качестве разделителей, а -t форматирует выходные данные в чистую таблицу.

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍4
📚 Learning PHP, MySQL & JavaScript: A Step-by-Step Guide to Creating Dynamic Websites, 7th Edition (2025)

PHP, MySQL и немного JavaScript — звучит как начало старого доброго веба? А теперь добавь туда React, Node.js, Flexbox и Ajax, и у тебя получится не просто сайт, а полноценное веб-приложение, которое работает и на десктопе, и на мобилке.

Эта книга — как руководство для фуллстэка-новичка. Автор пошагово ведёт от простого HTML-каркаса до живого динамического сайта, где всё связано с базой, красиво оформлено и не падает при первом запросе.

💡 Ты научишься:

🟡 писать PHP-код, который подстраивается под пользователя;
🟡 дружить с PDO;
🟡 держать куки и сессии под контролем;
🟡 оформлять всё в стиле CSS Grid & Flexbox;
🟡 и даже делать асинхронную магию через Ajax и Node.js.

🔗 Скачать

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

🔹 PHP 8.5.0 RC4 — вышел финальный релиз-кандидат PHP 8.5 перед стабильным релизом. Команда призывает разработчиков тестировать и помогать находить последние проблемы.

🔹 Xdebug Update (октябрь 2025) — опубликован свежий отчёт о развитии Xdebug за два месяца: улучшения, эксперименты и планы по дальнейшей оптимизации инструмента.

🔹 Laravel 12.37 — добавлен background queue driver для фоновой обработки заданий, метод insert() в фабриках, новый строковый метод ucwords() и другие улучшения производительности и удобства.

🔹 Полезные плагины для PhpStorm — JetBrains напомнили о малоизвестных, но мощных расширениях, которые добавляют языки, инструменты и улучшения рабочего процесса.

🔹 Symfony 7.3.6 — очередное maintenance-обновление с исправлениями и улучшениями стабильности.

🔹 Symfony 3–9 ноября 2025 — продолжается шлифовка Symfony 7.4 и 8.0, опубликованы новые детали выступлений на SymfonyCon Amsterdam 2025.

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

#свежак
⬆️ Метод «json»

Если вы используете Laravel 10 и выше, есть элегантный способ чтения JSON-файлов с помощью File::json(). Вы также можете передать флаги, которые вы обычно передаете в json_decode(), на случай, если вы хотите выбросить исключение 🚀

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

#vardump
🚀 В IT ценится не перфекционизм, а движение вперёд, и если вы давно откладывали обучение — самое время начать.

❤️ Proglib Academy продлевает розыгрыш MacBook Pro 14 до 30 ноября!

Что нужно:

⚡️ выбрать курс;
⚡️ пройти минимум две недели обучения (можно за два вечера);
⚡️ написать куратору #розыгрыш;
⚡️ забрать макбук.

🎓 Курсы, которые участвуют

👉 Участвовать
🧠 Laravel after() — After What, Exactly?

Многие считают, что метод after() в Form Request срабатывает после успешной валидации.
Логично? Да.

Но — неправильно.

На самом деле after() вызывается после завершения валидации, даже если она провалилась.
И это легко превращается в источник неожиданных багов и лишних SQL-запросов.

📉 Пример из практики:
даже при невалидных данных (brand_id = «Hepu») Laravel всё равно лезет в базу:

select exists(select * from products where article = ...)

А если в теле запроса прилетит массив вместо строки — получите 500-ку и «Array to string conversion».

Как обезопаситься: не делать тяжёлые проверки (например, через БД) прямо в Form Request.
Логика валидации данных — в Form Request, бизнес-валидация — в сервисах.
Так код станет быстрее, чище и проще в тестировании.

👉 Примеры в статье

Библиотека пхпшника
⚙️ Symfony HttpClient: 4 продакшн-паттерна, которые превращают интеграции в архитектуру

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

1) Fire-and-Forget через Messenger — мгновенный отклик без «спиннеров»
🎯 Сценарий: после регистрации отправляем данные в CRM/рассылку/welcome-email; часть сервисов медленные или нестабильные.
🧠 Идея: контроллер завершает пользовательский сценарий сразу, интеграции уходят в очередь; ретраи, dead-letter и идемпотентность — на уровне Messenger.
Что получить на выходе:
Стабильно быстрый ответ API/веб-слоя.
🛡️ Устойчивость к временным сбоям внешних сервисов.
🔁 Управляемые политики повторов и отложенных задач.

2) Мульти-тенант фабрика — тысячи «скоупнутых» клиентов из одного шаблона
🎯 Сценарий: SaaS с сотнями/тысячами клиентов, у каждого свой base URL и заголовки авторизации.
🧠 Идея: из «дефолтного» клиента создавать легковесные экземпляры для арендатора на лету (scoped options).
Преимущества:
📄 Отсутствие «километрового» YAML с клиентами.
🧭 Единые таймауты/политики по умолчанию + точечные переопределения.
🪝 Простая инъекция фабрики в доменные сервисы (например, синхронизация каталога по всем арендаторам).

3) Глобальный наблюдатель — полный аудит каждого HTTP-взаимодействия
🎯 Сценарий: сотни вызовов из десятков сервисов; нужно видеть, что отправили/получили и за сколько; профайлер недоступен в проде.
🧠 Идея: подписаться на события клиента (отправка/получение), писать аккуратные прод-логи: метод, URL, статус, длительность; при необходимости — заголовки и усечённые тела.
Результат:
🔎 Единый «след» всех внешних коммуникаций.
🧯 Разбор инцидентов без догадок.
📈 Метрики латентности для SLA и алёртинга.
⚠️ Замечание: соблюдать гигиену логирования (маскирование PII/секретов, контроль размера логов).

4) Data Stream — гигабайтные файлы без переполнения памяти
🎯 Сценарий: бэкапы 2–5 GB, большие экспорты или отчёты «на лету».
🧠 Идея: передавать в запрос поток (ресурс или генератор), чтобы клиент читал и отправлял данные порциями, без загрузки всего в память.
Плюсы:
🧊 Драматическое снижение пикового потребления RAM.
🧱 Устойчивые фоновые джобы.
🧵 Потоковая генерация (CSV/NDJSON) прямо из БД.

Где это особенно полезно
👤 UX-критичные пути: регистрация, чек-аут, действия в админке.
🌐 Интеграционные хабы с десятками поставщиков/маркетплейсов.
🕵️ Сложные расследования инцидентов и соответствие требованиям аудита.
💽 Бэкап и архивирование, массовые выгрузки, долгие отчёты.

Итог
Скорость: асинхронное делегирование устраняет «узкие места» UX.
🏗️ Масштаб: фабрика клиентов упрощает мульти-тенант и рост интеграций.
🔍 Надёжность: событийный аудит даёт прозрачность и измеримость.
💾 Стабильность: стриминг больших данных держит память под контролем.

Если вы всё ещё используете HttpClient как «обёртку над cURL», самое время сделать его полноценным архитектурным элементом. Делитесь в комментариях своими приёмами: ретраи и джиттер, circuit-breaker, автоперевыпуск OAuth2, контрактные тесты, эмуляция «флакнутых» API — что сработало у вас в проде?

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

Библиотека пхпшника
4👍1
🎓 Экспресс-курс «Математика для Data Science» стартует 4 декабря

Этот курс для вас, если вы:

🧑‍💻 Программист
Когда нужно понять, что происходит «под капотом» ML-алгоритмов.

📊 Начинающий DS / аналитик / студент
Чтобы закрыть теорию, подтянуть фундамент и собрать портфолио.

📈 Смежный специалист
Чтобы уверенно работать с моделями, статистикой и гипотезами.

🎁 Сейчас лучший момент стартовать:
— скидка 40% на курс до конца ноября
— можно пройти бесплатный тест на знание основ математики

👉 Записаться на курс