Как стать автором
Обновить
61.68

PHP *

Скриптовый язык общего назначения

Сначала показывать
Период
Уровень сложности

Logstash, Manticore, Nginx и Symfony: сбор, агрегация и быстрый поиск логов

Время на прочтение25 мин
Количество просмотров7.1K

Мысль о централизованном мониторинге логов хранилась в моей голове много лет, но реализовать ее я смог только совсем недавно. Рассказываю о настройке и подводных камнях связки Logstash + Manticore + Nginx + Symfony.

Читать далее

Использование Symfony / PHP

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров12K

Привет! Я, Андрей, Symfony разработчик - мы делаем сайты. Каждый день у нас уходит много ресурсов на администрирование и базовые настройки проектов. В этой статье поделюсь опытом, как можно адаптировать фреймворк Symfony для оптимизации таких затрат, какие настройки мы проводим для обеспечения быстрого функционирования, и как мы взаимодействуем с REST клиентами. Поехали.

Поехали

Версионная миграция структуры базы данных через PHP атрибуты

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4.1K

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

Читать дальше →

ч.15 Игровой авторитарный сервер на процессах и его архитектура в картинках — Создание сервера для онлайн ММО игр на PHP

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров3.3K

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

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

Бонус - архитектура игрового сервера в картинках.

Читать далее

Xdebug в качестве Php-консоли и REPL GUI —  чем заменить Python/JS консоль в Phpstorm

Время на прочтение5 мин
Количество просмотров3.2K

Перешли с Python на Php, а привычной интерактивной консоли из PyCharm нет? Пользуетесь JS-консолью в инструментах разработчика браузера, а для Php такого нет? Не беда, ведь в качестве интерактивной оболочки можно использовать консоль Xdebug! И мало того, что она интегрирована с Phpstorm, и там работает автодополнение кода прямо из проекта, так еще там есть такие фичи, которых и вовсе нету ни в Python Console , ни в подобных REPL-интеграциях других языков программирования. Более того, с этими фичами сама консоль будет практически не нужна. А настроить нужную конфигурацию для запуска можно буквально за 10 секунд.

Читать далее

Как продлить срок службы старых PHP-приложений

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров4.7K

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

Хоть обновление существующих PHP-приложений и является идеальным рекомендуемым подходом, мы не можем избежать появления приложений/сайтов, которые попросту не в состоянии оправдать человеческие, финансовые и политические затраты на их обновление. Особенно это касается старых PHP-приложений, работающих на PHP 5 или 7 версии. WordPress.org, например, сообщает, что только 16% зарегистрированных сайтов WordPress работают на версии PHP, поддерживаемой разработчиками ядра PHP.

Читать далее

Как мы внедряли Sentry. Часть 1 — установка и настройка

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров32K

Привет! Я Виталий, DevOps в LEADS.SU, в этой статье хочу рассказать как мы внедряли Sentry self-hosted и приводили к продакшен состоянию, которое должно отвечать требованиям высокодоступности - нельзя терять события ошибок. При этом не хотелось заморачиваться с кластеризацией для разных инструментов (вроде redis, postgresql, clickhouse, kafka и прочее). И тут мы вспомнили про распределенную сеть доставки логов из нескольких узлов td-agent и решили попробовать.

Читать далее

EasyAdmin и Mercure: реальный юзкейс

Время на прочтение8 мин
Количество просмотров4.1K

EasyAdmin — один из самых популярных генераторов административных панелей, доступных для Symfony-приложений. Поскольку для аутентификации пользователей он использует стандартный компонент безопасности Symfony, он позволяет входить в систему и изменять данные множеству пользователей одновременно. Но есть одна проблема…

Читать далее

1С-Битрикс. Массовая загрузка элементов в Highload-блоки

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров3.7K

При загрузке данных в Highload-блоки возможна ситуация, когда объем загружаемых данных очень велик.

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

На самом деле, основных пути три (привет старым добрым былинам): добавление в цикле, добавление прямым запросом и добавление массово через ORM-коллекции

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

Рассмотрим каждый из способов подробнее. Подчеркиваем, что речь идет именно о массовой записи.

Читать далее

Создание сервера для онлайн ММО игр на PHP ч.13 — Event-driven паттерн, JSON-RPC и почему не сервисная (SOA) архитектура

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров4.4K

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

В этой статье я без привязки к коду объясню простым языком и в картинках как можно применять в разработке архитектуры авторитарного сервера для онлайн игр шаблон проектирования Event-driven.

Читать далее

Пишем Telegram бота для распознавания голосовых сообщений и их обработки с помощью AI

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров9.7K

Всем привет. Меня зовут Игорь Филиппов и я веб-разработчик. Вы, вероятнее всего, знаете, как прочно ChatGPT закрепился в медийном пространстве. Ежедневно выходит сотни статей и видео на эту тему, предлагая разнообразные варианты применения.

Мне в голову пришла идея создать бота, который автоматически под каждым голосовым сообщением оставляет свой реплай с полной расшифровкой аудио. Но в процессе разработки я подумал, что можно дополнительно проинтегрировать бота с ChatGPT - для получения краткого пересказа самого сообщения. Тем более, к тому моменту, когда я делал бота, Open AI только выпустила доступ к API.

С какими сложностями столкнулся, как решил и что получилось в итоге описал в этой статье.

Читать далее

Преобразование формата ошибок с помощью встроенных событий Symfony

Время на прочтение3 мин
Количество просмотров5.4K

Работая над проектом, у меня возникла задача: возвращать информацию об Exception в формате JSON если client в запросе указывает поддерживаемый им MIME тип application/json используя заголовок Accept.

Простыми словами - если клиенту нужна ошибка в JSON, то дать ему JSON. В других случаях возвращать стандартную ошибку в формате HTML.

Давайте рассмотрим пример, как это можно сделать используя механизм обработки встроенных событий Symfony.

Читать далее

Перенос музыкальной библиотеки пользователя в Yandex-музыку из Spotify после блокировки в РФ с помощью php-окружения

Время на прочтение2 мин
Количество просмотров5.5K

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

В сети есть способы по импорту данных из Spotify (встроенный сервис импорта существует и в Яндекс-музыке, сторонние сервисы, боты в Телеграмме), но все они работали до полной блокировки, когда сервис только объявил о своем уходе, дав какое-то время пользователям на перенос. Будучи студентом курса по php, я начал свои изыскания, итогом которых стала эта статья-инструкция, которая, надеюсь, пригодится еще не только мне.

Читать далее

Ближайшие события

Генерация строго-типизированных коллекций в PHP

Время на прочтение3 мин
Количество просмотров4K

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

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

На днях появилась мысль, как решить эту задачу с помощью генерации кода: Предположим у нас есть папка с объектами в которой находится объект name\space\SomeObject. Полного имени класса этого объекта нам достаточно, чтобы создать для нее класс коллекции name\space\collections\SomeObjectCollection. Такая коллекция может гораздо в большей степени строго-типизированной. Отдельным плюсом сталоо бы отсутствие зависимости от сторонних пакетов: т.к. код получен генерацией, а не расширением шаблона. Единственная связь, которую потребует класс коллекции – связь с классом, экземпляры которого коллекция будет содержать.

Не найдя в интернете подходящего решения под свою задумку, решил написать его сам...

Читать далее

SingleA: доменный SSO своими руками

Время на прочтение31 мин
Количество просмотров5.6K

SingleA — это набор Symfony бандлов, которые позволяют развернуть свой PHP’шный SSO, реализующий фреймворк SingleAuth. Тот, в свою очередь, позволяет пользователям веб-приложений, живущих на общем домене (2 уровня и выше) перестать повторно ходить на SSO после того, как они один раз уже залогинились (даже ради простого редиректа).

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

Читать далее

Настройка Xdebug 3 на внешнем сервере в Docker-контейнере через SSH-туннель

Время на прочтение3 мин
Количество просмотров12K

В нашей организации используется такой подход к разработке - на локальной машине (Windows 11) установлен PhpStorm и находится репозиторий с кодом. В PhpStorm настроена автоматическая выгрузка изменений на dev-стенд (внешний сервер), где и исполняется код. На dev-стенде: Ubuntu 20 и Docker (swarm mode).

Общий принцип настройки Xdebug таков:

Читать далее

Новое в Joomla 4.1

Время на прочтение5 мин
Количество просмотров5.3K

15 февраля 2022 года вышла Joomla 4.1. В неё привнесено более 200 изменений, включающих как исправления ошибок, патчи совместимости с PHP 8, так и новый функционал. О новинках пойдёт речь в этом небольшом обзоре.

Читать далее

Быстрый способ получить данные об организациях пользователя при авторизации через Госуслуги

Время на прочтение4 мин
Количество просмотров7.7K

В рамках одного из проектов команда PHP-разработки DD Planet столкнулась со сложностью в процессе интеграции с ЕСИА. Была необходимость получать данные по юридическим организациям, которые числятся за пользователем. В документации Госуслуг не было достоверного описания, и нам удалось найти неочевидное решение этой задачи.

Читать далее

Выбор фреймворка и переход на Laravel в рамках создания собственной СДО (часть 4)

Время на прочтение11 мин
Количество просмотров5.3K

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

Возник вопрос перехода на PHP фреймворк (бэкенд) и библиотеку/фреймворк JS (фронтенд). О переходе на ReactJS в следующей части.

Так как ранее я изобретал велосипед в виде создания собственного фреймворка, то изначально хотел перейти на микрофреймворк SlimPhp 4, который основан на рекомендациях (стандартах) PSR-7 (Request и Response), PSR-15 (Middleware), PSR-11 (Dependency Container/Injection) и т.д. Из коробки фреймворк содержит собственную реализацию указанных стандартов, которые можно заменить на свои или реализации других фреймворков.

Читать далее

Подключение и Настройка ElasticSearch + MySql + Yii2

Время на прочтение18 мин
Количество просмотров20K

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

Сегодня я расскажу как установить и настроить поисковой движок ElasticSearch на сервере под управлением Ubuntu и сделать авто импорт данных из MySql, а также мы настроим взаимодействие Yii с движком ES.

Читать далее