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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
How to: масштабировать до миллиарда документов в Symfony

Цены на бензин меняются по несколько раз в день. В итоге получается адский датасет: десятки гигабайт CSV и сотни тысяч записей цен за сутки. Если грузить это «как в SQL» (по документу на каждую цену), MongoDB быстро превращается в кладбище индексов и медленных агрегаций.

Как делают по-взрослому: сначала разбираем структуру данных (станции отдельно, цены отдельно), потом проектируем схему под запросы. Главный трюк — bucket pattern: складывать цены не по одной записи, а «ведрами» по станция + тип топлива + день, внутри хранить массив цен за день. Так документов становится в разы меньше, а дневные графики и «последнюю цену» можно доставать быстро.

Дальше — импорт не через «всё в память», а по дням: читаем CSV → временная коллекция → агрегация в bucket-документы → добавляем экстремумы (min/max) и предагрегаты (средние) → подтягиваем данные станции и денормализуем только то, что реально нужно.

👉 Читать статью
🌚1
🧠 Rate Limiting — защита от перегрузки и злоупотреблений

🔹 Rate Limiting — это ограничение количества запросов, которое клиент может сделать за определённый период. Он предотвращает DoS-атаки, brute-force, резкий рост нагрузки и аварийные ситуации.

📌 В Laravel
Laravel имеет встроенную поддержку через middleware throttle, а также гибкий API для кастомных правил:
✔️ ограничение на количество запросов за минуту/час;
✔️ разные лимиты для разных пользователей (по ID, API-ключу или IP);
✔️ кастомные сообщения об ошибке.
Пример стандартного ограничения:


Route::middleware(['throttle:60,1'])->group(function () {
Route::get('/posts', [PostController::class, 'index']);
});

🧾 Это ограничит пользова­теля до 60 запросов в минуту.
Для более гибкого контроля можно определить лимитер в App\Providers\RouteServiceProvider:



RateLimiter::for('api', function ($request) {
return Limit::perMinute(100)->by($request->user()?->id ?: $request->ip());
});
```

🧾 Такой подход позволяет задавать разные лимиты для аутентифицированных и анонимных пользователей.

📌 В Symfony
Symfony тоже имеет встроенный Rate Limiter с разными алгоритмами (фиксированное окно, sliding window, token bucket). Он может быть применён к маршрутам через сервисы и конфигурацию.

⚠️ Но для защиты от реальных DoS-атак лучше комбинировать приложение с ограничением на уровне веб-сервера или прокси (NGINX, Cloudflare), поскольку встроенный rate limiter требует загрузки Symfony для каждого запроса.

Библиотека пхпшника
🥱4
Service Tags в Symfony: не про ивенты, а про архитектуру

Service tags в Symfony часто воспринимают как утилиту для Event Listener’ов и Twig-расширений. Это правда — но лишь малая часть картины. На практике tags — один из самых мощных архитектурных инструментов Symfony, если использовать их осознанно.

Статья как раз про это: не «как повесить тег», а как построить расширяемую систему без правок YAML и без условной логики — строго по Open-Closed Principle.

Ключевая идея
Мы собираем модульный Document Processing Pipeline:
PDF, CSV, JSON и любые новые форматы
добавление нового процессора = новый класс, без конфигов
Symfony 7.4, PHP 8.3+, атрибуты вместо YAML

Что здесь действительно важно
1. AutoconfigureTag на интерфейсе
Любая реализация автоматически попадает в систему. Никаких services.yaml.
2. TaggedIterator = современный Strategy
Типизированная коллекция сервисов, с ключами и приоритетами, без Compiler Pass’ов «по старинке».
3. defaultIndexMethod вместо магии
Ключ коллекции определяет сам сервис. Контейнер не знает доменной логики — и это правильно.
4. Кастомные атрибуты поверх тегов
Доменные метаданные (type, priority) живут в атрибуте, а не в конфиге. Код становится декларативным и читаемым.
5. TaggedLocator для ленивой загрузки
Ни один процессор не создаётся, пока он реально не нужен. Это критично для больших систем.
6. Compiler Pass как архитектурный guardrail
Контейнер валидирует систему на этапе сборки:
— дубли типов
— архитектурные инварианты
— ошибки ловятся до runtime
7. Абсолютный уровень декомпозиции
Даже чистые PHP-атрибуты без зависимости от Symfony можно «подключить» через registerAttributeForAutoconfiguration.
Домен остаётся чистым. Инфраструктура — умной.

Почему это ценно
✔️ расширение без модификации
✔️ ноль условной логики
✔️ высокая тестируемость
✔️ архитектурные ошибки ловятся на этапе сборки контейнера

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

Библиотека пхпшника
1👍1
В Laravel с версии 10.7 появилась поддержка конвейера для процессов, который легко позволяет связывать вывод одного процесса с входными данными для другого.

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

#vardump
11
📚 Algorithmic Thinking: Learn Algorithms to Level Up Your Coding Skills, 2nd Edition (2024)

Если ты знаешь синтаксис, но на словах «графы» и «динамика» начинаешь гуглить — это норм. Эта книга как раз про переход от «я пишу код» к «я понимаю, что делаю».

Второе издание учит алгоритмическому мышлению через задачи из спортивного программирования. Без высшей математики и абстрактной теории. Задача → варианты решений → выбор лучшего.

Что прокачиваешь:

🔵 хеш-таблицы, рекурсию, динамическое программирование;
🔵 деревья, графы, кучи;
🔵 умение сравнивать алгоритмы, а не брать первый рабочий;
🔵 привычку думать о сложности до того, как код попал в прод.

Почему это полезно:

✔️ задачи взяты из реальных соревнований, а не «учебных примеров»;
✔️ мышление — универсальное, язык вторичен;
✔️ готовит к собеседованиям без заучивания шаблонов.

Кому подойдёт:

✔️ студентам и самоучкам;
✔️ тем, кто «падает» на алгоритмах на интервью;
✔️ разработчикам, которые хотят писать код быстрее и умнее, а не длиннее.

Скачать

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

🔹 Laravel 12.49.0 — в коллекциях появился метод hasSole() для проверки наличия ровно одного подходящего элемента. Также добавлена поддержка between с подзапросами, сохранение ключей в fluent resource collections и работа с датой/временем в команде maintenance mode.

🔹 NativePHP for Mobile — бесплатно — объявлен релиз NativePHP Air, а мобильная версия NativePHP стала полностью бесплатной, вместе с рядом улучшений экосистемы и платформы.

🔹 Laravel VS Code Extension 1.5.0 — улучшена поддержка Livewire 4 и Blade: более точный парсинг, автодополнение и IntelliSense для современных Laravel-проектов.

🔹 Statamic 6 — состоялся официальный релиз новой версии CMS: обновлённая админ-панель и современный фронтенд-стек.

🔹 Symfony 26 января — 1 февраля — активное развитие Symfony 8.1, а также выпущены версии 5.4.51, 6.4.33, 7.3.11, 7.4.5 и 8.0.5 для устранения потенциальной уязвимости и усиления безопасности.

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

#свежак
🗂️ Сохранение нескольких моделей

Знаете ли вы, что Laravel позволяет сохранять сразу несколько связанных моделей с помощью метода saveMany 🚀

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

#vardump
2
Почему вы должны указывать тип данных в массивах в PHP

Статья обсуждает важность и преимущества использования типов массивов в PHP для повышения ясности кода, улучшения автодополнения в IDE и улучшения статического анализа.

👉 Читать

Библиотека пхпшника
Proglib ищет эксперта для ведения PHP-каналов. Нам нужен автор, который глубоко погружён в индустрию и пишет для опытных разработчиков.

🐘 ЗАДАЧИ:

➡️ Вести три канала о PHP: основной, задачи и собеседования.
➡️ Создавать контент Middle+: архитектура, оптимизация, разбор RFC, кейсы Laravel/Symfony.
➡️ Готовить задачи и вопросы для интервью с качественным разбором решений.
➡️ Работать с аналитикой: отслеживать метрики (охваты, ERR) и корректировать контент-план.
➡️ Мониторить комьюнити и оперативно упаковывать тренды в посты.

🎯 ТРЕБОВАНИЯ:

➡️ PHP Middle+: понимание работы движка, паттернов и экосистемы.
➡️ Стиль: умение писать для профи — ёмко, аргументированно и без воды.
➡️ Инструменты: уверенное владение нейросетями для ускорения работы.
➡️ Самостоятельность: вы сами находите темы и отвечаете за качество.

УСЛОВИЯ:

📍 Удалёнка, гибкий график, частичная занятость.
📍 Сдельная оплата за количество задач.
📍 Аудитория — тысячи профильных разработчиков.

👉 Оставляйте отклик, и мы свяжемся с вами!
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🔒 Symfony: Lock vs Semaphore — когда и что выбрать?

В разработке многозадачных PHP-приложений часто возникает необходимость контролировать доступ к общим ресурсам. Symfony предоставляет два мощных инструмента для этой цели: Lock и Semaphore. Хотя оба компонента служат для синхронизации процессов, их подходы и области применения существенно различаются.

🔐 Lock — эксклюзивный доступ
Lock обеспечивает исключительный доступ к ресурсу:
🔸Один процесс — один доступ: только один процесс может получить «ключ» к ресурсу в любой момент времени.
🔸Идеально для критических секций: обновление файлов, обработка платежей, изменение данных в базе данных.
🔸Простая модель: либо у вас есть доступ, либо вы ждёте.

🚦 Semaphore — ограниченный параллелизм
Semaphore позволяет контролировать количество одновременно работающих процессов:
🔸Ограниченное количество разрешений: каждый процесс «потребляет» одно разрешение.
🔸Идеально для ограничения параллелизма: обработка изображений, API-запросы, очереди задач.
🔸Модель «ограниченного доступа»: несколько процессов могут работать одновременно, но не более заданного лимита.

🧠 Когда использовать что?

Lock: используйте, когда необходимо обеспечить, чтобы только один процесс выполнял задачу в определённый момент времени.

Semaphore: используйте, когда нужно ограничить количество одновременно выполняющихся процессов, например, для предотвращения перегрузки системы.

📚 Документация:


Symfony Lock

Symfony Semaphore


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

#элементарный_выбор
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Instructor

Библиотека для структурированной экстракции данных на PHP, основанная на LLM. Создан для простоты, прозрачности и контроля.

Пример показывает, как инструктор извлекает структурированную информацию из предоставленного текста (или последовательности сообщений в чате).

🔗 Github

#инструменты
😁1
🚀 Как ускорить массовую отправку HTTP-запросов в PHP

🔍 Постановка задачи:
Есть скрипт на PHP, который должен отправлять множество HTTP-запросов. Нужно сделать это как можно быстрее. Очевидное решение — параллельная отправка.

🔧 Шаг 1: последовательная обработка
Простой цикл с curl_init() и curl_exec() на каждый URL. Результат: 10 запросов выполняются за ~4.4 секунды.

⚙️ Шаг 2: повторное использование curl-хэндла
Инициализируем curl один раз и переиспользуем. Время выполнения снижается до ~1.7 секунды.

Шаг 3: параллельная отправка с curl_multi_
Используем curl_multi_init() и запускаем запросы одновременно. Итог: всего 0.5 секунды на 10 запросов. Почти в 9 раз быстрее, чем изначально.

📦 Шаг 4: отправка батчами (batching)
Если запросов сотни или тысячи, одновременно всё не потянет даже мощный сервер. Решение — отправка пакетами, например по 3. Это позволяет контролировать нагрузку. В нашем примере — ~0.8 секунды на 10 запросов.

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

Библиотека пхпшника #буст
🔥62🥱2
CRUD на PHP с использованием файберов и пула соединений с PostgreSQL

В новой статье на Хабре автор делится опытом создания прототипа CRUD-приложения, использующего файберы и пул соединений с PostgreSQL. Результаты впечатляют: один процесс PHP CLI обрабатывает 10 параллельных запросов за 2 секунды, благодаря асинхронной обработке и неблокирующему вводу-выводу.

🔍 Ключевые моменты:

Файберы позволяют обрабатывать несколько запросов в одном процессе, улучшая производительность.

Неблокирующий драйвер PostgreSQL обеспечивает асинхронное взаимодействие с базой данных.

Сравнение с сервером на базе PHP-FPM показало значительное преимущество в
производительности при использовании файлов.

💡 Для кого это будет полезно:
🔸 Разработчикам, стремящимся повысить производительность своих приложений.

🔸 Тем, кто интересуется асинхронным программированием в PHP.

🔸 Специалистам, работающим с PostgreSQL и желающим оптимизировать взаимодействие с базой данных.

🔗 Хабр
1🥱2
🛠 Ускоряем работу в PhpStorm: самые полезные хоткеи

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

🔹 Двойное нажатие Shift: открывает окно Search Everywhere для быстрого поиска файлов, классов или действий по всему проекту.

🔹 Ctrl + N: переход к классу по имени.

🔹 Ctrl + Shift + N: поиск и открытие файла по названию.

🔹 Ctrl + Alt + Shift + N: быстрый поиск и переход к символу (классу, методу, переменной, константе).

🙂 Пишите в комменты ваши любимые сочетания
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4👍2