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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Подготовка Symfony-приложения для Swoole, RoadRunner, and FrankenPHP (без использования ИИ)

📝 Проблема:
🔄 Модели разделения памяти:

Модель «Shared Nothing» и модель «Shared Memory». Обычно в PHP-приложениях используется модель «Shared Nothing», где каждый запрос обрабатывается отдельным PHP-процессом, и между запросами не происходит обмена памятью.

⚠️ Непредвиденные эффекты:
С появлением решений типа Swoole, RoadRunner и FrankenPHP, которые используют модель «Shared Memory», возникают некоторые непредвиденные проблемы. Эти решения позволяют разделять память между различными запросами внутри одного рабочего процесса, что приводит к улучшению производительности, но может вызывать неожиданные побочные эффекты, так как состояние между запросами сохраняется.

🔧 Решение:
Представлен пример кода на Symfony 7.0, где демонстрируется проблема с сохранением состояния между запросами. Это приводит к неправильному поведению при использовании модели «Shared Memory». Для исправления проблемы предлагается использовать инструмент статического анализа кода phanalist, который проверяет, являются ли сервисы в приложении состояний или неизменяемыми. Также предлагается использовать интерфейс ResetInterface в Symfony для обнуления состояния сервисов между запросами.
8👍1
«Мы пилили монолит — много нас, а он один». Полезные советы от команды Яндекс Еды

Рассказ начинается с краткой истории сервиса, подчеркивая ее эволюцию от стартапа в 2015 году до крупного монолита к 2023 году. Решение отказаться от монолита было обусловлено различными проблемами, такими как отсутствие экспертизы, проблемы с релизами, сложность кода, размытые ответственности и трудности с локальным развертыванием.

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

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

Затем автор подробно рассматривает конкретные инструменты и подходы, используемые во время перехода:

1️⃣Auth-proxy: Сервис шлюза API, ответственный за авторизацию пользователей и маршрутизацию запросов к соответствующим микросервисам. Он позволяет постепенно перенаправлять трафик от монолита к новым сервисам.

2️⃣API-proxy: Фасадный сервис для интеграции микросервисов. Применяются различные варианты переключения трафика, включая постепенное перенаправление трафика от монолита к новым сервисам при обеспечении идентичных ответов.

3️⃣Сервис экспериментов: Сервис, который делит пользовательские запросы на группы на основе параметров запроса, позволяя контролируемо экспериментировать с новой функциональностью.

Автор также обсуждает использование стратегий, особенно паттерна Стратегии, для переноса функциональности из монолита в микросервисы. Каждая стратегия представляет собой различный этап процесса перехода, от прямого доступа к базе данных до полной интеграции сервиса.

Предоставляются несколько примеров, чтобы проиллюстрировать процесс перехода, такие как миграция отправки уведомлений, информации о стране, управления пользователями и конечной точки для получения предложений.
🥱43👍1🔥1😁1
10 повседневных ошибок PHP

Здесь рассказывается о важности обработки ошибок в PHP и предлагает подробный обзор наиболее распространенных типов ошибок и способов их обработки. Описаны такие типы ошибок, как PHP ParseError, DivisionByZeroError, TypeError, UnexpectedValueException, PDOException, RuntimeException, InvalidArgumentException, LogicException, ArithmeticError и Exceptions, а также предоставлены практические советы и методы их обработки.

Далее статья рассказывает о преимуществах использования инструментов для мониторинга и отладки ошибок в PHP, таких как Zipy, и предоставляет рекомендации по интеграции таких инструментов в разработку.

Общими советами для эффективной обработки ошибок в PHP являются включение отчетов об ошибках и ведение логов, использование правильных техник обработки исключений, тщательная отладка и поддержание чистого и хорошо структурированного кода.
4🌚2🥱1
У вас было такое, что весь рабочий день занимались текущими задачами, а вечером возникало чувство, будто ничего не сделали? Если было, то как вы с этим боролись?
Anonymous Poll
20%
Поставлю значимые дела на первую половину дня
8%
Разберусь, какие задачи можно делегировать
17%
Смерюсь, ведь так работают все
26%
Да пофиг — главное работа есть
1%
Свой вариант (напишу в комментарии)
28%
Посмотреть результаты
🥰5👍1
Coolify

Это open-source альтернатива Heroku / NetLify / Vercel / и т. д.

Он помогает вам управлять своими серверами, приложениями, базами данных на вашем собственном оборудовании, все, что вам нужно, это SSH-соединение. Вы можете управлять VPS, Raspberry Pi и так далее.
👍2
Существуют определенные проблемы, связанные с традиционным моделью запрос-ответ в веб-разработке, поэтому здесь предлагается альтернативное решение, основанное на использовании ReactPHP для асинхронного выполнения PHP-кода.

В начале описывается привычная схема работы сервера: он выполняет задачу по запросу клиента и завершает свою работу после отправки ответа. Однако, когда количество одновременных запросов становится значительным, сервер может столкнуться с проблемой ограниченности производительности, особенно в случае выполнения медленных задач ввода-вывода (I/O), таких как обращение к базе данных.

Затем вводится понятие ReactPHP — библиотеки, позволяющей выполнять PHP-код асинхронно, подобно Go или Node.js. Эта библиотека не требует сложной установки и позволяет решить проблему блокировки сервера на медленных операциях I/O.

Здесь объясняется архитектура на основе событий, которая лежит в основе ReactPHP. Она предполагает создание бесконечного цикла, который ожидает событий и обрабатывает их. Затем приводится примеры использования таймеров, потоков (streams), обещаний (promises) и дочерних процессов (child processes) в ReactPHP для выполнения различных асинхронных задач, таких как чтение файлов, обработка HTTP-запросов и выполнение внешних команд.

Наконец, статья показывает, как использовать ReactPHP для обработки загрузки файлов в проекте Laravel. Она объясняет, как создать отдельный сервер на ReactPHP, который будет обрабатывать эти запросы асинхронно, в то время как основное приложение Laravel будет продолжать работать как обычно.
👍7
Анемичная модель предметной области и логика в сервисах

Анемичная модель предметной области (Anemic domain model) это такая модель, где сущности содержат только свойства, а бизнес-логика находится в сервисах. Ее противоположность это богатая модель предметной области (Rich domain model), где логика находится в сущностях, а cервиcы рекомендуют писать только в редких случаях.

В этой статье показано, почему логика в сервисах является более правильным подходом. Рассмотрим пример бизнес-требований и их реализацию с Anemic domain model.
👍4😁3
💬Как часто вы пишете документацию?
😁36🔥3🙏1🥱1💯1
Сокращение нагрузки процессора PHP почти на 40% за счет обновления с Ubuntu 20.04 до 22.04

Команда разработчиков заметила, что после обновления Ubuntu 20.04 до 22.04 сама по себе уменьшилась нагрузка на ЦП следующим образом:

✔️Среднее использование ЦП на Ubuntu 20.04 LTS: 22.9%
✔️Среднее использование ЦП на Ubuntu 22.04 LTS: 13.2%
Это огромное снижение использования ЦП на 42% просто путем обновления операционной системы.

После этого было принято решение обновить остальные сервера и теория подтвердилась. Эти сервера используют Nginx & PHP-FPM, ничего более.

Посмотреть остальные результаты можно здесь.
👍17🤔7👏61🌚1
🔟 10 суровых истин, которые должен знать каждый джун

Вы думаете, что карьера в ИТ — это сплошные плюшки? Забудьте! Реальность жестока: низкие зарплаты на старте, бесконечные задачи и битва за релокацию. Откройте глаза на суровые реалии прямо сейчас!

👉 Читать статью
👉 Зеркало
👍4🥰2
#дайджест новостей по PHP за неделю:

🔎PHP 8.3.4 и 8.2.17 выпущен! — Команда разработчиков PHP объявляет о немедленной доступности PHP 8.3.4. и 8.2.17. Это баг-фикс релиз.

🔎Laravel Herd выпускает v1.5.0 с новыми сервисами. — Laravel Herd v1.5 представляет новую захватывающую функцию: Services.

🔎Вышел Laravel 11 — Вот список нововведений

🔎Выпущен CakePHP 5.0.6 — Улучшения включают в себя: исправление проверки экземпляров Chronostime. Исправление дескриптора файла в stubconsoleinput и многое другое!

🔎Неделя Symfony #898 (11-17 марта 2024 г.)
6
Forwarded from Библиотека программиста | программирование, кодинг, разработка
This media is not supported in your browser
VIEW IN TELEGRAM
💬 Open Source по-русски: путь к технологической независимости или обочина прогресса?

Для одних организаций open source является ключом к преодолению зависимости от иностранных вендоров и драйвером инноваций, для других — дырой в безопасности и обочиной технологического прогресса.

Мы хотим изучить текущее состояние и возможности открытого ПО в России. Пройдите опрос и помогите нам увидеть ситуацию глазами IT-профессионалов.

👉 Ссылка на опрос 👈

Прохождение займёт примерно 4 минуты
👍2🌚1
Оптимизированные файлы конфигурации в Laravel 11

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

Было решено удалить все конфигурационные файлы из стандартной установки и вместо этого предоставить возможность добавить только те файлы и опции, которые действительно нужны. Это позволяет создавать более компактные и чистые конфигурационные файлы, что может упростить процесс разработки и поддержки приложения.
🥱7👏3🌚1
Магический API Resource в Laravel

В Laravel есть удобные API ресурсы, с которыми легко и приятно работать в области трансформации данных для ответа на запрос. Но что делать когда возникает необходимость изменить их структуру в соответствии с бизнес-потребностями? Рассказывается здесь!
👍7🥱3
Назовите 3-4 нормальные формы реляционных БД.

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

Первая нормальная форма (1NF): В этой форме все атрибуты в таблице являются атомарными, то есть каждая ячейка содержит только одно значение.

Вторая нормальная форма (2NF): Вторая нормальная форма требует, чтобы каждый неключевой атрибут полностью зависел от ключа, то есть не должно быть частичной зависимости.

Третья нормальная форма (3NF): В этой нормальной форме устраняются транзитивные зависимости. Это означает, что если A зависит от B, а B зависит от C, то A не должно зависеть от C.

Бойса-Кодда нормальная форма (BCNF): Это расширение третьей нормальной формы, которое гарантирует, что каждое неключевое поле зависит только от ключа целиком, а не от его части.

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

#вопросы_с_собеседований
👍131
Laravel Zero — создание TCP-сервера

🔍 Описание задачи:
Автор начинает, описывая цель: создание TCP-сервера для участия в ежегодном CTF. 🛡️ Команда выбирает Laravel Zero для разработки консольного приложения.

🌐 Основы TCP-серверов:
Объясняется, что TCP-серверы принципиально важны, а затем описывается процесс их работы и важность создания сервера для обработки входящих соединений от клиентов.

🚀 Создание сервера:
Здесь показано, как устанавливать Laravel Zero и Swoole и создавать команду для запуска сервера. Затем описываются этапы создания TCP-сервера с использованием событий Start, Connect, Receive и Close.

🖼️ Использование Blade и Tailwind CSS:
Автор обсуждает использование шаблонов Blade для форматирования логов и ответов сервера, а также применение Tailwind CSS для стилизации консольных приложений.
👍7
Система уведомлений в ресурсах Laravel

В предыдущей статье по работе с API ресурсами в Laravel была затронута тема изменения бизнес-потребностей в области формирования внешнего вида объекта ответа на запрос к API приложения.

В этой вводится новая бизнес-потребность под названием «нотификации». Их суть в том, чтобы вместе с ответом на запрос добавлять информацию о каких-либо действиях.
😁6👍3