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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🐞 Тренировка по дебагу

Если ваши коллеги пишут идеальный код, пора развивать навыки поиска ошибок.

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

Для этого можно использовать промпт:
Ты — эксперт по созданию ошибок в коде на PHP, умеющий писать код, который выглядит функциональным, но содержит тонкие и значимые ошибки. Твоя цель — создавать фрагменты кода на PHP, содержащие конкретные типы ошибок, позволяя пользователям тренировать свои навыки отладки и проверки кода. Код должен быть синтаксически правильным, но семантически ошибочным.

Напиши функцию на PHP, которая <ДЕЛАЕТ ЧТО-ТО>. Включи как минимум три различных ошибки, которые разработчик может часто допускать при реализации этой функции. Ошибки должны приводить к некорректным результатам или потенциальным ошибкам времени выполнения.


С каждым багом вы становитесь только сильнее.

Библиотека пхпшника
😁2
🚀 How to: Реализация JWT аутентификации с использованием Symfony

Этот гайд поможет настроить JWT аутентификацию в Symfony для аутентификации пользователей с использованием refresh token. Подход ориентирован на использование Symfony для аутентификации пользователей в сторонних системах.

1️⃣ Установка и настройка Jose JWT Bundle

Для работы с JWT необходимо установить библиотеку web-token/jwt-bundle. Эта библиотека позволяет генерировать и проверять JWT с помощью криптографических ключей.

2️⃣ Генерация ключей

Создаются ключи для подписи JWT и настройки их в Symfony. Важно хранить эти ключи в безопасном месте и не коммитить их в систему контроля версий.

3️⃣ Конфигурация

В файле конфигурации Symfony указываются пути к сгенерированным ключам и настраиваются параметры для их использования в процессе подписи и верификации JWT.

4️⃣ Создание Refresh Token

Для реализации механизма обновления JWT необходимо создать сущность refresh token, который будет храниться в базе данных. Эти токены позволят пользователю получать новые JWT при истечении срока действия старых.

5️⃣ Генерация и обмен JWT

Создается сервис, который генерирует JWT для пользователя и обменивает refresh token на новый JWT при его истечении.

6️⃣ Создание конечных точек (Endpoints)

Настроить маршруты для:

1. Объявления публичного ключа.

2. Запроса начального JWT и refresh token.

3. Обмена refresh token на новый JWT.

7️⃣ Ротация ключей и безопасность

Рекомендуется регулярно менять ключи и настроить удаление просроченных refresh token с помощью cron-задач. Важно обеспечить высокую безопасность системы и провести тщательное тестирование.

👉 Читать полную статью

Библиотека пхпшника
3
📶 Паттерны коммуникации в распределенных системах

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

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

☑️ Запрос-ответ с HTTP

Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP — GET, POST, PUT и DELETE.
 
Однако использование этого паттерна может привести к проблемам, если сервисы образуют цепочку взаимодействий: в таком случае сбой одного из сервисов может привести к отказу всей операции, а также к расточительному использованию ресурсов и каскадным сбоям.

☑️ Общие данные

Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.

Главное преимущество этого паттерна — простота реализации и возможность обеспечения взаимодействия между устаревшими и современными системами без проблем совместимости. Однако он не подходит для сценариев, требующих низкой задержки.

☑️ Асинхронный запрос-ответ

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

Основная сложность здесь — корреляция между запросом и ответом: экземпляр сервиса, отправивший запрос, может отличаться от экземпляра, получающего ответ, поэтому требуется способ отслеживания запросов.

☑️ Коммуникация на основе событий

В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.

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

👨‍💻 Подробнее читайте в статье.
☀️ Лето — время для отдыха или время для работы

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

Без перезагрузки не будет долгосрочной эффективности. Лето — отличное время, чтобы восстановить силы и зарядиться энергией на будущие проекты.

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

Работать не означает только трудиться. Можно провести время, развивая собственные идеи и обучаясь новому, что даст возможность сделать перерыв и одновременно развиваться.

💬 Что вы делали прошедшим летом? Делитесь в комментариях 👇

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.

Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».

🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.

Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏

👉 Регистрируйтесь через форму на лендинге
😢1
Post-PHP эра: куда движется веб-разработка?

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

🟡 PHP жив и развивается. На более чем 76% серверов используется именно PHP. И это не пустые слова, ведь с каждым релизом он становится только быстрее. Только посмотрите на рост производительности: Laravel на PHP 8.3 стал быстрее на 38%, Drupal — на 52%, а Symfony — на 27%.

🟡 Современные фреймворки такие как Laravel и Symfony уже давно перешли в категорию зрелых решений для больших систем. Laravel Octane, например, работает с Swoole и RoadRunner, что делает его идеальным для асинхронных приложений.

🟡 Серьезные улучшения: строгая типизация, перечисления (enum'ы), readonly-поля и асинхронность через Fibers делают код намного более структурированным и предсказуемым.

👉 Почему стартапы идут в TypeScript + Node.js? Да, для быстрого старта и MVP это хорошее решение. Но что происходит дальше, когда приходит время масштабироваться? В этом случае PHP с Laravel или Symfony выигрывает за счет зрелости, модульности и предсказуемости архитектуры.

🔎 Итак, какой вывод?
PHP не умер, он стал просто стабильным и предсказуемым. Laravel и Symfony стали не просто инструментами для быстрого старта, а настоящими платформами для создания серьезных проектов.

🔗 Хабр
🥱11👍8🔥2🌚2
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития AI

24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.

Тема:
«ИИ-агенты: новая фаза развития искусственного интеллекта».


На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.

Подробности рассказываем в гс выше — включай, чтобы не пропустить.
💬 Фриланс vs найм: что лучше

Выбирать между фрилансом и офисной работой — как решать, что важнее: свобода или безопасность. Оба пути учат, развивают и приносят деньги… но по-разному.

➡️ Фриланс:

— Гибкий график, проекты на вкус
— Быстро прокачиваешь навыки
— Доход выше при умелом подходе
— Каждый день новые вызовы

📎 Нет соцпакета, нестабильный доход, всё на вас

➡️ Корпоратив:

— Стабильная зарплата и соцпакет
— Менторство и карьерный рост
— Процессы уже налажены
— Работа в команде

📎 Менее гибко, проекты выбираете компания, бюрократия

Фриланс и офис не конкурируют, а показывают разные пути развития. Главное — понять, что важнее именно вам.

А вы что выбрали бы: свободу фриланса или стабильность в найме

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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Подборка новостей по PHP за неделю:​

🔹 Laravel 12.27 — добавлена поддержка SQS FIFO queue message group IDs, что открывает доступ к новой возможности Amazon — Fair Queue. Также в релизе несколько дополнительных улучшений.

🔹 Xdebug (август 2025) — опубликован ежемесячный отчёт о развитии инструмента.

🔹 PHP 8.5.0 Beta 3 — вышла третья бета PHP 8.5. Релизный цикл движется по плану, тестирование продолжается.

🔹 Symfony 8–14 сентября 2025 — основное внимание уделено слиянию новых фич для будущих релизов Symfony 7.4 и 8.0.

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

#свежак
👍51
💡 Совет по Laravel: предотвращение случайных запросов

Знаете ли вы, что Laravel поставляется с методом preventStrayRequests(), который позволяет избежать реальных запросов во время тестирования?
Это удобно не только для сторонних API, но и для локальных API.

Хотя ваши тесты могут пройти локально, потому что вся среда работает, они могут провалиться в CI-конвейере. Это происходит потому, что в CI-конвейере обычно активен только тестируемый сервис, поэтому реальные запросы к недоступным API приведут к сбою вашего набора тестов.
👍5
Стратегии кэширования и лучшие практики

🔧 Что такое кэширование и зачем оно нужно?

Кэширование — это процесс хранения часто запрашиваемых данных в быстродоступном месте, чтобы снизить нагрузку на более медленные источники данных, такие как базы данных или внешние API. Это позволяет значительно ускорить работу приложения.
Существует несколько уровней кэширования:

Кэширование вывода: хранение окончательного HTML-вывода страницы для последующих запросов.
Кэширование объектов: хранение результатов запросов к базе данных или API в виде PHP-объектов.
Кэширование опкода: хранение скомпилированного байт-кода PHP-скриптов, чтобы избежать повторного парсинга.

💡 Популярные технологии кэширования в PHP

Redis: это хранилище данных в памяти, поддерживающее различные структуры данных, такие как строки, хэши, списки, множества и отсортированные множества. Redis идеально подходит для кэширования структурированных данных и выполнения сложных операций над ними.
Примеры использования Redis:
Ленты новостей и активность пользователей: использование отсортированных множеств Redis для эффективного хранения и извлечения упорядоченных постов или действий.
Таблицы лидеров и рейтинги: использование отсортированных множеств Redis для поддержания актуальных рейтингов в реальном времени.
Счётчики и ограничение частоты запросов: использование атомарных операций Redis для поддержания счётчиков и реализации ограничения частоты запросов.

Memcached: это высокопроизводительная распределённая система кэширования объектов в памяти. Она предназначена для снижения нагрузки на базу данных путём кэширования данных и объектов в ОЗУ.
Примеры использования Memcached:
Результаты запросов к базе данных: кэширование результатов дорогих запросов к базе данных для значительного снижения нагрузки на сервер базы данных.
Рендеринг HTML-фрагментов: кэширование отрендеренных частей страниц (например, заголовков, футеров или содержимого боковой панели) для ускорения генерации страниц.
Ответы API: кэширование ответов от внешних API для снижения задержки и повышения надёжности.

APCu: это расширение PHP, предоставляющее кэширование данных в памяти для переменных PHP. В отличие от Redis и Memcached, APCu является локальным для сервера, на котором работает PHP, что делает его очень быстрым, но менее масштабируемым.
Примеры использования APCu:
Конфигурация приложения: кэширование настроек конфигурации, которые часто читаются, но редко изменяются, для снижения I/O на диск и повышения производительности.
Мемоизация: использование APCu для хранения результатов дорогих вычислений, что позволяет избежать повторных вычислений.

📌 Рекомендации по использованию
Redis: рекомендуется использовать для кэширования структурированных данных, реализации очередей сообщений и управления сессиями в многосерверных конфигурациях.
Memcached: подходит для кэширования простых данных и объектов, особенно в односерверных или маломасштабных приложениях.
APCu: идеален для кэширования данных, специфичных для одного сервера, таких как конфигурационные параметры или результаты вычислений.

⚙️ Другие стратегии оптимизации производительности PHP
Оптимизация кода: написание эффективного кода путём минимизации циклов, использования соответствующих структур данных и избегания ненужных вычислений.
Асинхронная обработка: перемещение ресурсоёмких задач (например, отправка электронной почты или генерация отчётов) в фоновую очередь для поддержания отзывчивости основного приложения.
Оптимизация базы данных: обеспечение правильной индексации базы данных, оптимизация запросов и извлечение только необходимых данных.
Расширения PHP: использование расширений PHP, написанных на более низкоуровневых языках (например, C), для производительных частей приложения.
Кэширование опкода: использование кэширования опкода, такого как OPcache, для хранения скомпилированных PHP-скриптов в памяти, что снижает накладные расходы на парсинг и компиляцию кода.

🔗 Пример из реальной практики на Medium
🧠 Приукрашивали ли вы опыт на собеседовании? Ловили ли вас на слове?
Собеседования — это не только проверка профессиональных навыков, но и искусство самопрезентации. Многие соискатели задаются вопросом: можно ли немного приукрасить свой опыт, чтобы выделиться среди других кандидатов? И если да, то как избежать последствий, если «приукрашивание» будет раскрыто?

🎭 Приукрашивание: где грань?
По данным hh.ru, около 70% работодателей сталкивались с ложью в резюме соискателей. Наиболее распространённые случаи включают:

🔸 Завышение уровня владения иностранными языками.
🔸 Приписывание несуществующего опыта работы или образования.
🔸 Преувеличение достижений и масштабов ответственности на предыдущих местах работы.

Однако важно понимать, что даже небольшие искажения могут быть выявлены во время собеседования, особенно если интервьюер задаёт уточняющие вопросы. Например, кандидат, утверждавший, что лично увеличил выручку компании на 40%, может быть пойман на слове, если его попросят предоставить конкретные данные или примеры из работы.

💬 Ваш опыт
А как вы относитесь к приукрашиванию опыта на собеседованиях? Приходилось ли вам немного «добавить» в резюме? Были ли случаи, когда вас «поймали» на слове? Поделитесь своими историями и мнениями в комментариях!

#междусобойчик
🔥 Не пропустите событие осени для AI-комьюнити

24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта»

😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт:
— почему ИИ-агенты сейчас на пике инвестиций
— чем они отличаются от ChatGPT и обычных моделей
— цикл агента: восприятие → планирование → действие → обучение
— живое демо простого агента
— как бизнес уже получает ROI до 80%

⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.

Мест мало, регистрация закроется, как только забьём комнату
1
🔒 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
🚀 composer/xdebug-handler — отключение Xdebug для повышения производительности

Библиотека composer/xdebug-handler предназначена для временного отключения расширения Xdebug в процессе выполнения PHP-скриптов, что позволяет значительно ускорить операции, такие как установка зависимостей с помощью Composer.

Зачем это нужно?
Xdebug предоставляет мощные возможности для отладки и профилирования PHP-кода, однако его включение может существенно замедлить выполнение скриптов. Например, Composer может работать в 3–4 раза медленнее при активном Xdebug, даже если не используются функции профилирования.

composer/xdebug-handler автоматически перезапускает процесс PHP без загрузки Xdebug, сохраняя при этом все необходимые настройки и переменные окружения. После завершения работы Xdebug восстанавливается.

Когда стоит использовать?
В CLI-скриптах, например, при запуске Composer.
В CI/CD пайплайнах, где важна скорость выполнения.
В разработке, когда необходимо временно ускорить выполнение скриптов без отключения Xdebug.

Установка

composer require composer/xdebug-handler

📦 GitHub

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

#инструменты
4👍3