TG Telegram Group Link
Channel: Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
Back to Bottom
Расскажите о ReactPHP

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

Вот некоторые ключевые особенности и концепции ReactPHP:

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

Event Loop: ReactPHP использует событийный цикл (event loop), который является центральной частью асинхронной архитектуры. Event loop отслеживает и обрабатывает различные события, такие как завершение операций ввода-вывода или таймеры.

Promise: Обещания (Promise) в ReactPHP представляют собой абстракцию для асинхронных операций. Они позволяют создавать цепочки асинхронных операций, которые будут выполнены после завершения предыдущей операции. Это сделано для более удобного и читаемого управления асинхронным кодом.

Компоненты: ReactPHP предоставляет различные компоненты и библиотеки для обработки конкретных задач. Например, React/Socket обеспечивает низкоуровневый доступ к сокетам, а React/Http предоставляет возможность создания веб-серверов.

Веб-сервер: ReactPHP можно использовать для создания высокопроизводительных веб-серверов. Это особенно полезно для обработки множества одновременных подключений, таких как веб-сокеты или длительные соединения.

#вопросы_с_собеседований
Удаление неиспользуемых родителей с помощью Doctrine

Здесь рассматривается нестандартный случай в управлении базами данных, когда при удалении дочернего объекта (например, вложения) нужно также удалить родительский объект (например, пост или автора). Это отличается от обычной практики, когда при удалении родительского объекта удаляются все связанные дочерние объекты.
✍️Библиотека программиста» находится в поиске автора оригинальных статей

Кто нужен?
● Энтузиасты (джуны и выше), которые держат руку на пульсе, читают помимо книг зарубежные техноблоги
● Энтузиасты, которым есть что сказать

Тематика
● DevOps
● В четырех случаях из пяти вы предлагаете тему статьи

Объем
● От 7 до 15 тыс. знаков без учета кода
● 2-3 статьи в месяц

Оплата
● 8к руб. за статью
● Работаем с самозанятыми (компенсируем налог), ИП

Я пишу «так себе», что делать?
Чтобы написать статью, которую не стыдно опубликовать, достаточно овладеть инфостилем. У нас есть бесплатный курс для начинающих копирайтеров «Статьи для IT: как объяснять и распространять значимые идеи». Время прохождения курса: 1-2 недели.

✉️Пишите на [email protected]
Было бы полезно, если бы вы могли определить определенное действие, которое должно выполняться каждый раз, когда ваши шаблоны Blade встречают объекты определенного класса?

Например, при работе с библиотеками, такими как Carbon, часто бывает так, что вы хотите отформатировать их определенным образом во всем своем приложении.

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

Этот PR для Laravel 8.x пытается решить эту же проблему. Как оказалось, этот PR вводит новый метод Blade::stringable(), который можно разместить в методе boot провайдера служб и позволяет пользователю добавлять перехватывающие замыкания для любого класса. Возвращаемое значение будет выведено в Blade.

Итак, если мы хотим, чтобы каждый объект Carbon, найденный в шаблонах Blade, был отформатирован определенным образом, мы можем определить его в методе boot App\Providers\AppServiceProvider. Как только это сделано, вам не нужно форматировать даты, основанные на Carbon, в своем приложении вручную. Указанный формат в Blade::stringable будет применяться к каждой доступной дате Carbon в вашем приложении.

Довольно удобно, не так ли?

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

Важно правильно перезагружать Opcache при деплое кода на сервер без использования контейнеров.

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

Статья предлагает два решения проблемы:

1. Перезагрузка процесса «php-fpm» после деплоя новой версии кода. Однако, это решение приводит к прерыванию текущих запросов на короткое время.

2. Использование утилиты gordalina/cachetool или аналогичной, например, chop, для сброса кэша. Cachetool позволяет сбросить кэш без перезагрузки php-fpm, обнаруживая PHP-FPM через сокеты или IP-адрес и порт. Утилиту можно установить и использовать следующими командами:

Скачивание и установка:
curl -sLO https://github.com/gordalina/cachetool/releases/latest/download/cachetool.phar
chmod +x cachetool.phar

Сброс кэша:
php cachetool.phar opcache:reset

В случае использования других сокетов или IP-адресов и портов, команда выглядит так:
php cachetool.phar opcache:reset --fcgi=/var/run/php/php8.2-fpm-profiler.sock
✍️Библиотека программиста» находится в поиске автора оригинальных статей

Кто нужен?
● Энтузиасты (джуны и выше), которые держат руку на пульсе, читают помимо книг зарубежные техноблоги
● Энтузиасты, которым есть что сказать

Тематика
● DevOps
● В четырех случаях из пяти вы предлагаете тему статьи

Объем
● От 7 до 15 тыс. знаков без учета кода
● 2-3 статьи в месяц

Оплата
● 8к руб. за статью
● Работаем с самозанятыми (компенсируем налог), ИП

Я пишу «так себе», что делать?
Чтобы написать статью, которую не стыдно опубликовать, достаточно овладеть инфостилем. У нас есть бесплатный курс для начинающих копирайтеров «Статьи для IT: как объяснять и распространять значимые идеи». Время прохождения курса: 1-2 недели.

✉️Пишите на [email protected]
#дайджест #phpdevjob

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

▪️PHP Developer
Новосибирск. SIBERS — разработка программ и веб-приложений для иностранных заказчиков
Подробнее

▪️Backend-разработчик
Санкт-Петербург. Светлые головы — сопровождение в сфере интернет-маркетинга и IT-разработки
Подробнее

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

▪️PHP fullstack разработчик
Томск. BlaBlaCar — ведущая в мире общественная туристическая сеть
Подробнее

▪️PHP Laravel разработчик
Удаленка. Офис в Казани. Акцент на результат — маркетинговое агентство
Подробнее

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

▪️PHP-разработчик
Удаленка. Офис в Москве. Узнать Штрафы.ру — штрафы ГИБДД, автоналоги
Подробнее

▪️Backend PHP-разработчик
Москва. Холдинг Е-генератор — разработка и развитие интернет-проектов
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Neutomic

Это быстрый, асинхронный, легкий PHP-фреймворк, предназначенный для работы с длительными процессами. Построен на базе AMPHP, имеет удобный API и хороший инструментарий.
Объясните Path Traversal в PHP

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

Как работает Path Traversal

Пользовательский ввод: Приложение принимает пользовательский ввод для путей к файлам, например, через параметр GET или POST.
Неправильная очистка: Приложение неправильно очищает или валидирует ввод.
Траверсирование директорий: Злоумышленник может манипулировать вводом для навигации по файловой системе с помощью последовательностей вроде ../ (точка-точка-слэш) для перемещения вверх по структуре директорий.
Несанкционированный доступ к файлам: Злоумышленник получает доступ к файлам и директориям за пределами предусмотренного диапазона, который может включать конфиденциальную информацию, например, конфигурационные файлы, файлы с паролями или другие конфиденциальные данные.

Меры по предотвращению уязвимостей Path Traversal

Чтобы предотвратить уязвимости path traversal в PHP, следует:

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

#вопросы_с_собеседований
Как проверить размер базы данных и таблиц MySQL

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

Проверка использования дискового пространства MySQL
Для общего понимания, сколько места занимает директория MySQL, используйте команду Linux:

du -sh /var/lib/mysql

Эта команда показывает, сколько дискового пространства занимает директория данных MySQL, обычно расположенная в '/var/lib/mysql'.

Также, уже с помощью SQL-запросов, можно проверить следующие данные:

✔️Размер конкретной базы данных
✔️Размер всех баз данных
✔️Размер конкретной таблицы
✔️Размеры всех таблиц из всех баз данных
✔️Размер индексов

Эти команды полезны для мониторинга роста базы данных, планирования резервного копирования и оптимизации производительности.
👀Что из этого сгенерировала нейросеть?

Подписывайтесь на наш новый канал про нейросети для создания изображений, там есть:

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

👉Подписывайтесь!
Please open Telegram to view this post
VIEW IN TELEGRAM
Интересная функция, появившаяся в Laravel 10, «--profile», которая облегчит вам поиск медленных тестов в вашем приложении.

Этот параметр «--profile» поможет сохранить скорость ваших тестов и поможет вам либо исправить медленные тесты, либо лучше сгруппировать их, чтобы не запускать их все время.
🐳 Что ж, давайте об актуальном: а вы используете Docker в рабочих проектах?

👍 — использую
👾 — нет

#интерактив
Новое в Symfony 7.1

В Symfony 7.1 представлено два интересных нововведения: компонент TypeInfo и атрибут MapUploadedFile. Давайте рассмотрим их подробнее.

TypeInfo Component

TypeInfo — это новый компонент, который предоставляет расширенные возможности для работы с типами данных в PHP. Основные возможности компонента включают:

🟢Более точная информация о типах данных: TypeInfo предоставляет методы для получения детальной информации о типах данных, включая их подтипы, nullable и union типы.

🟢Улучшенное сравнение типов: Компонент позволяет сравнивать типы данных с учетом всех возможных вариантов, что упрощает написание более точных и надежных проверок типов.

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

MapUploadedFile Attribute

MapUploadedFile — это новый атрибут, который упрощает работу с загруженными файлами в Symfony. Этот атрибут автоматически преобразует объекты UploadedFile в нужный вам формат.

Основные возможности включают:

🔸Автоматическое маппирование: Атрибут автоматически маппирует загруженные файлы в параметры вашего контроллера, что упрощает работу с файлами.

🔸Поддержка валидации: MapUploadedFile поддерживает встроенную валидацию загруженных файлов, что обеспечивает дополнительную безопасность и надежность.

🔸Интеграция с другими компонентами Symfony: Атрибут легко интегрируется с другими компонентами и сервисами Symfony, что упрощает его использование в рамках всего приложения.
🍓 Подборка лучших статей «Библиотеки программиста» за май: сохраняй в заметки, чтобы не пропустить #самыйсок

🐍🆕 Змея сбросила старую кожу: что нового в Python 3.13
🐍🔀 Под капотом asyncio: принципы работы и ключевые концепции
🗝️ 40 незаменимых API для разработчиков
🖥️🔤 Транскрибация видео и создание субтитров с помощью Whisper, FFmpeg и Python
📊 Где изучать Data Science в 2024 году?
🌐 Scrapy VS Crawlee: сравнение фреймворков для веб-скрапинга
❤️ Активация с первого взгляда: как влюбить пользователя в продукт
💻🚀🏰 Как мы создали ИИ-стартап на хакатоне выходного дня в Германии
🐍🌳 Реализация алгоритма Укконена на Python
📈 Стать аналитиком Big Data: пошаговое руководство 2024
💻🚀💊 «Доктор Хаус»: ИИ-диагност в вашем телефоне. Передаём стартап в хорошие руки
📖 ТОП-10 книг о том, как правильно построить карьеру в IT
🤯 Как простая задачка поставила в тупик программистов (и как они из него выбрались)
🐳✈️ Docker ушёл из РФ! Инструкция по восстановлению доступа
💸📊 На сколько просели зарплаты в ИТ в 2024 году?
🎤 Как не облажаться с докладом на IT-конференции
🏃 Самоучитель по Go для начинающих. Часть 12. Обобщенное программирование. Дженерики
🎭 7 типов программистов, которых вы встретите на собеседовании
🔍 Тестирование в Java: лучшие практики, инструменты и рекомендации для разработчиков
👁️💼 Открытые и скрытые вакансии в IT: как найти работу мечты
🅾️ Что такое «О» большое: объясняем на простых примерах
🤖💼 55 промтов для ChatGPT, которые помогут подготовиться к собеседованию
🐍💪 ТОП-5 вопросов повышенной сложности на собеседовании по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация PHP-приложений для повышения производительности

В статье рассматривается процесс оптимизации легаси PHP-приложения, работающего на значительно превышающей по размеру серверной инфраструктуре.
HTML Embed Code:
2024/06/15 07:11:38
Back to Top