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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
⏯️ Unleash: переключатели функций в PHP

Feature flags (или переключатели функций) позволяют включать и отключать определенные функции в приложении без необходимости развертывания нового кода. Одним из удобных инструментов для их управления является Unleash – мощная и гибкая open-source платформа.

Что такое feature flags?
Feature flags – это механизмы, которые позволяют динамически управлять функциональностью приложения. Если, например, в вашей системе можно включать и отключать регистрацию пользователей или комментарии через настройки в базе данных, то это уже базовая форма feature flags. Однако специализированные системы предлагают более продвинутые возможности.

Преимущества использования
Инструменты для управления feature flags, такие как Unleash, помогают:

🔸Постепенно выкатывать новые функции для ограниченной группы пользователей (например, бета-тестеров).
🔸Включать или отключать функции в зависимости от региона (например, для соответствия GDPR).
🔸Запускать A/B тестирование различных версий одной функции.
🔸Отключать проблемные функции в случае сбоев.
🔸Создавать временные или экспериментальные возможности без необходимости ветвления кода.

Unleash: ключевые особенности

Unleash предлагает как платную, так и open-source версию. Его главное отличие – локальная обработка флагов без отправки данных на сервер Unleash. Это снижает нагрузку на сеть и повышает производительность. Данные кешируются, а обмен с сервером происходит минимально – примерно два HTTP-запроса в минуту.

Unleash поддерживает большинство популярных языков программирования и может быть легко интегрирован в проект.

Unleash предлагает несколько стратегий активации фич:

🔹Простое включение/отключение.
🔹Ограничение по ID пользователя или IP-адресу.
🔹Градиентный (поэтапный) rollout – функция включается для части пользователей на основе определенного параметра (например, ID).
🔹Кастомные стратегии, которые можно адаптировать под конкретные задачи.

Интеграция с Symfony
Unleash предлагает удобный бандл для Symfony, который упрощает настройку. Он поддерживает автоматическое определение ID пользователя, интеграцию с HTTP-запросами и использование feature flags в шаблонах Twig.

👉Статья с практическими примерами
👍5🔥1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🤔 Какие вебинары вам действительно нужны?

Привет! 👋

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

Ваши ответы дадут нам понимание, какие темы и форматы действительно важны, а также помогут сделать вебинары интереснее и продуктивнее.

Заполнение займет всего пару минут, а нам это очень поможет! Спасибо, что участвуете в нашем развитии! 💙

👉 Пройти опрос
🌚4😁3
💡 Затрагиваемые отношения Eloquent

Laravel автоматически обновляет updated_at в отношениях «многие-ко-многим», а также поставляется с методом setTouchedRelations для ручного обновления связанных моделей в отношениях «один-к-одному» и «один-ко-многим» 🚀

#совет
👍4
php-mrloop — расширение, предоставляющее интерфейс к API io_uring через библиотеку mrloop

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

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

Прочитайте статью на медиуме, чтобы узнать, почему io_ring лучше, чем реализации select(), poll() и epoll().


🔗Github

#инструменты
👍4
Что такое CQRS?

CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который предлагает разделить операции записи и чтения данных в приложении на две отдельные ветки. Вместо того, чтобы использовать единый интерфейс для обеих операций, CQRS предлагает использовать различные модели данных для команд и запросов. Это позволяет оптимизировать каждую модель для конкретных задач и улучшить производительность приложения.

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

Несмотря на то, что CQRS может быть сложной архитектурой для начала использования, правильное применение может принести множество преимуществ.

Интересная статья на эту тему
👍5🔥1
Опасности, связанные с unserialize в PHP, и как оставаться в безопасности

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

Опасности unserialize() при работе с ненадёжными данными
Одной из главных угроз является PHP Object Injection (POI). Злоумышленники могут передавать специально сформированные сериализованные объекты, что приведёт к выполнению нежелательных команд, утечке данных или даже удалению файлов. Например, если приложение десериализует пользовательские настройки без проверки входных данных, хакер может внедрить вредоносный объект и выполнить код на сервере.

Последствия атак через PHP Object Injection
Использование уязвимой десериализации может привести к:

🔸удалению файлов на сервере;
🔸выполнению произвольного кода;
🔸краже конфиденциальной информации.

Как защититься
Чтобы минимизировать риски, рекомендуется:

1. Избегать использования unserialize() для данных от пользователя. Вместо этого применять безопасные форматы, такие как JSON

2. Использовать параметр allowed_classes (начиная с PHP 7.0) для ограничения десериализуемых классов

3. Фильтровать классы при десериализации. Можно проверять, принадлежит ли объект разрешённому списку

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

👉Читать полностью
😁3👍1
Секреты стройности монолита: подходы по снятию нагрузки с БД

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

Помимо сервисов, разработанных на C++, Go и Python, в инфраструктуре остаётся монолитная система, известная как «кора», написанная на PHP. Этот компонент представляет собой обширную кодовую базу, содержащую большое количество бизнес-логики и предоставляющую данные по API для 120 сервисов.

После обновления фреймворка и версии PHP возникла необходимость решения другой важной проблемы, которая становилась всё более заметной. В тот период участились инциденты, связанные с базой данных, что требовало оперативных действий для стабилизации системы. Особенно критичными были случаи во время праздничных дней, когда нагрузка возрастала на 30–40%, а также при проведении массовых операций. Например, однажды сбои произошли в момент добавления бесплатного соуса к каждой позиции меню в крупной сети ресторанов.

🔗Хабр
👍1
📋 Переполнение буфера в Laravel: Причины, профилактика и исправления

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

Причины возникновения Buffer Overflow в Laravel

Основные факторы, которые могут привести к этой уязвимости:

🔸недостаточная проверка пользовательских данных;
🔸отсутствие ограничений на размер вводимых данных;
🔸некорректная обработка загрузки файлов;
🔸использование потенциально опасных функций, таких как unserialize().

👉Читать подробнее
😁5🌚1
#дайджест #PHPdevjob

Вакансии PHP разработчиков уровня Junior

▪️ PHP-программист
Офис (Балашиха), КОЛЕСО.ру

▪️ PHP-программист
Удалёнка, TRINFI DIGITAL

Вакансии PHP разработчиков уровня Middle

▪️ PHP Developer
Гибрид (Санкт-Петербург), ЮДС Медиа

▪️ PHP-разработчик
Офис (Санкт-Петербург), NewGen Vision

Вакансии PHP разработчиков уровня Senior

▪️ PHP-разработчик
Офис (Барнаул) / Удалёнка, Sveak

▪️ PHP-разработчик
Удалёнка, РОСОСМОТР

Понравились вакансии?
❤️ — да
🤔 — нет
3
Какую из следующих функций следует использовать, чтобы найти родительский класс класса?
Anonymous Quiz
54%
get_parent_class()
20%
parent_class()
8%
class_parent()
18%
get_class_parent()
😁12🥱1
🌊 Wave — стартер-пак для разработки SaaS-приложений

Библиотека написана на Laravel и включает все необходимое:

— аутентификация,
— профили пользователей,
— биллинг,
— подписка,
— роли и права доступа,
— уведомления и административная панель.

Инструмент упрощает создание SaaS-приложений, предоставляя необходимые базовые компоненты и гибкие возможности для дальнейшей настройки.

💻 GitHub
1🤔1👾1
Как использовать коллекции в Laravel?

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

Создание коллекций: Вы можете создавать коллекции, используя вспомогательную функцию collect, передавая массив или объект, реализующий интерфейс IteratorAggregate:

$collection = collect([1, 2, 3, 4, 5]);


Манипуляция с коллекциями: После того как у вас есть коллекция, вы можете использовать широкий спектр методов для манипуляции данными:
map(): Преобразует каждый элемент в коллекции.
filter(): Фильтрует элементы на основе функции обратного вызова.
reduce(): Сводит коллекцию к единственному значению с использованием функции обратного вызова.
pluck(): Извлекает список конкретных атрибутов из каждого элемента.
sortBy(): Сортирует коллекцию по указанному ключу.
groupBy(): Группирует коллекцию по указанному ключу.
slice(): Извлекает часть коллекции.
И многие другие...

Цепочка методов: Вы можете соединять несколько методов вместе, чтобы выполнять сложные операции в одной строке.
👍42😁1
🪤 Избегите ловушки Enum в Laravel

В Laravel использование enum (перечислений) помогает задать фиксированный набор значений, например, для статусов, ролей или категорий. Применение enum в качестве типа данных позволяет строго контролировать значения при работе с базой данных, что делает код чище и уменьшает вероятность ошибок. Однако с ростом проекта и изменением бизнес-логики этот подход может привести к проблемам, особенно в системах с легаси-кодом.

В идеале разработка начинается с чистой базы данных, которая настраивается под текущие задачи. Это позволяет создавать точные тесты и корректировать их при появлении новых сценариев. Однако в реальных условиях проекты редко остаются неизменными: добавляются новые значения enum, старые устаревают, а данные в базе продолжают храниться. Если удалить устаревший enum из кода, но оставить его в базе, Laravel может выдать ошибку, так как значение больше не соответствует ожидаемому набору.

📌 Основные сложности при использовании enum-кастинга в Laravel:

🔸Неочевидные ошибки — автоматический механизм приведения типов в Eloquent может привести к сбоям, не оставляя четкого следа в логах.
🔸Невозможность удаления устаревших значений — в продакшен-среде нельзя просто удалить данные, если их использует бизнес-логика.
🔸Проблемы при откате версий — если новая версия кода добавила enum, а затем произошел откат на более старую версию, система может перестать корректно работать.

Решение — отказ от жесткой привязки enum к модели через кастинг.

Вместо этого можно использовать кастомный обработчик, который позволит контролировать ошибки, не нарушая работу системы. Такой кастер позволяет безопасно обрабатывать неизвестные значения, предотвращая падение приложения.

Такой подход позволяет:

🔹Избежать неожиданных ошибок — кастер не выбрасывает исключения, а логирует проблему.
🔹Гибко управлять данными — можно настроить, как обрабатывать устаревшие значения (например, заменять их на дефолтные).
🔹Упрощает поддержку — код остается понятным и адаптируемым к изменениям

👉Читать подробнее
😁4🤔2🌚2
💡 Форматирование процентов

Знаете ли вы, что Laravel поставляется с помощником percentage, позволяющим получить процентное отношение к любому показателю? 🚀

#совет
👍6😁4🤔2
Как вы тестируете свой код?⬇️⬇️⬇️
😳 Если бы языки программирования были девушками

Выбрать язык — всё равно что найти идеального партнера. Кто-то западает на строгую типизацию, кто-то ищет простоту и гибкость, а некоторые готовы углубиться в самые сложные алгоритмы отношений.

Мы заглянули в Тиндер разработчика и нашли там PHP. Как вам? 😏

Еще больше прекрасных дам языков программирования в нашем канале Библиотека программиста.

Свайпайте и выбирайте свой мэтч ❤️
🥱10🔥7👍42
🔥История легенды Силиконовой долины: Энди Бехтольсхайм

Если вам интересна история Кремниевой долины из первых уст, прочитайте полное интервью.

➡️ Краткая выжимка

В этом интервью Энди Бехтольсхайм рассказывает о своем детстве в Германии, первых экспериментах с электроникой, учебе в Стэнфорде и работе в Xerox PARC. Он делится историей создания Sun Microsystems, перехода к сетевым технологиям и своими взглядами на будущее IT-индустрии. Также он объясняет, как сделал легендарную инвестицию в Google и почему стартапы должны правильно выбирать момент для выхода на рынок.

🔗 Ссылка на интервью в формате PDF
🥱7😢1
📊 Состояние PHP в 2024 году: результаты исследования состояния экосистемы разработчиков от JetBrains

PHP остается краеугольным камнем веб-разработки, на нем работают миллионы сайтов по всему миру. Его активное и заинтересованное сообщество ценит его гибкость и простоту использования.

В этом году в опросе приняли участие 2 660 PHP-разработчиков со всего мира. По уровню опыта преобладают мидлы. 86% уже используют PHP 8, но его распространение идёт медленнее, чем в своё время у PHP 7.

Среди фреймворков Laravel безоговорочно лидирует, а его популярность продолжает расти. В плане инструментов PhpStorm остаётся главным выбором разработчиков, однако VS Code набирает обороты, особенно среди начинающих.

Читайте в исследовании и узнайте, как PHP-разработчики ориентируются в постоянно меняющемся мире современной веб-разработки.
👍14🤩21
🔥 Как НЕ НАДО собеседовать middle разработчиков

Автор является действующим PHP middle разработчиком в одной средней компании. Занимается разработкой highload микросервисов в B2B сфере. Суммарно обрабатывается около 50к запросов в секунду, хранятся миллиарды записей и находится на поддержке около тысячи интернет‑магазинов.
Он имеет опыт в техническом собеседовании, в том числе и других middle php разработчиков. За свою карьеру провёл пару десятков таких собеседований, по результатам которых было нанято около 5 разработчиков и 2 аутсорс компании.

🔗Читай на Хабре, как автор делится опытом собеседования на позицию middle php разработчика во «ВКонтакте»
👍4😢3😁1🤔1