Веб-версияОткрыть в Telegram
OOpen Source: PHP

Open Source: PHP

@open_source_php · канал · Технологии · в индексе с 2026-05-25
421подписчиков
280средний охват поста
2постов за 30 дней
56постов в индексе
D
Ссылка
нажмите — покажем
Вернуть метод в ExpressionBuilderInterface в yiisoft/db В пакете yiisoft/db (это независимсый от фреймворка DBAL от команды Yii нужно добавить отсутствующий метод в интерфейс. Я уже начал это делать, но другие дела скушали всё доступное время 😂 Итак: 1. https://github.com/yiisoft/db/pull/946 2. Надо в остальных пакетах сделать изменения под интерфейс + поправить по комментам. #yii #yii3
887 ·
D
Фотография
нажмите — покажем
Export-ignore-check В целом все крупные библиотеки следят за размером своего дистрибутива, чтобы конечный пользователь не скачивал вместе с архивом либы ненужные файлы, вроде документации, тестов, файлов конфигурации dev зависимостей Но у меня лично каждый раз боль глазами сравнивать структуру файлов и содержимое .gitattributes (export-ignore директива), тем более часто случается рассинхрон, в том числе и у крупных библиотек (тот же phpstorm-stubs) В связи с этим написал либу, которая призвана проверить, что там за архив получается из вашей библиотеки (через git archive или скачав напрямую с packagist) и найти там ненужные файлы. Она покажет вам сколько вы сэкономите кБ, вдобавок автоматически может добавить рекомендуемые изменения в ваш .gitattributes. Я прогнал топ тысячу пакетов с packagist, 470 из них могут быть оптимизированы, так шо возможно и вам пригодится
4 · 882 ·
А
Ссылка
нажмите — покажем
Пофиксить PHP 8.4 deprecations в RoadRunner PHP 👩‍💻 https://github.com/roadrunner-php/issues/issues/39 Нужно обновить пакет version-checker, чтобы он не плевался депрекейтами PHP 8.4 Делается это несложно (можно посмотреть связанные PR в той же ишуе): подключается spiral/code-style, запускается и весь код становится красивым и без депрекейтов. Пользователи RoadRunner и Temporal, внедряющие PHP 8.4, будут вам благодарны.
3 · 918 ·
А
Фотография
нажмите — покажем
Изменено. Тут была бредовая идея, но теперь вот это: Несколько проблем PHP CS Fixer и их решения: - CS Fixer пока нестабилен с новым PHP 8.4 синтаксисом. Поэтому при запуске он падает с предупреждением, мол "запускаешь на свой страх и риск, выстави PHP_CS_FIXER_IGNORE_ENV=1 и будешь сам виноват". Если код пишется без новых фичей PHP 8.4, то ставим ENV и радуемся жизни. - CS Fixer, как зависимость, тянет много "мусорных" пакетов, которые могут повлиять на другие зависимости проекта. В этом случае можно заюзать composer-bin-plugin и установить CS Fixer в отдельную папочку, которую можно даже смело заигнорить не только в гите, но и в IDE. - Хотел предложить добавить им сборку бинарей, но отказался от идеи, т.к. вредя будет больше, чем пользы. Ведь CS Fixer'у важно зависеть именно от PHP проекта.
1 · 885 ·
С
#yii3 🖼 Добавить дженерик для метода ConnectionInterface::transaction() В пакете Yii DB (абстракция над СУБД) есть метод ConnectionInterface::transaction(), который выполняет анонимную функцию в рамках транзакции и возвращает её результат. Необходимо типизировать метод таким образом, чтобы Psalm мог вывести тип результата. ⭐️ Тикет на GitHub
1 · 869 ·
А
Во время сегодняшнего стрима обнаружилось, что под свеженький RoadRunner 2025 не все PHP-пакеты обновлены. Нужно в composer.json для зависимости spiral/roadrunner добавить версию ^2025.1 Вот эти пакеты: roadrunner-php/centrifugo roadrunner-php/tcp roadrunner-php/services Быстро вошёл — быстро вышел, приключение на несколько минут. Зато неоценимый вклад! 😏
1 · 901 ·
D
В PHP-CS-Fixer смержили мой фиксер new_expression_parentheses! Позавчера состоялся релиз v3.76.0 Kids Playground, туда наконец-то попал фиксер new_expression_parentheses, который мы делали в Open Source цеху (#1, #4). Он убирает скобки вокруг new выражений в соответствии с моим RFC в PHP 8.4. Вот как включить это правило в .php-cs-fixer.dist.php после обновления: return new Config() // разрешаем PHP-CS-Fixer работать на 8.4, // это вместо переменной среды PHP_CS_FIXER_IGNORE_ENV ->setUnsupportedPhpVersionAllowed(true) // включаем параллельную обработку файлов ->setParallelConfig(ParallelConfigFactory::detect()) // по умолчанию finder ищет только *.php // и игнорит директории vendor и .* (.git, .idea, ...) ->setFinder(Finder::create()->in(__DIR__)) ->setRules([ '@PhpCsFixer' => true, 'new_expression_parentheses' => [ // убираем ненужные скобки 'use_parentheses' => false, ], ]); Мейнтейнер Dariusz Rumiński предлагает добавить new_expression_parentheses в сет @PHP84Migration. Накидайте там лайков, пожалуйста. @open_source_php, кажется, у нас есть задачка для подписчиков. 😊 ____________ 1. Слоники Пых выехали ко мне из Иркутска. Транспортная компания обещала доставить в Москву в течение 9 дней. Жду! 2. Мы вчера с программным комитетом Пых.конф’25 зафиналили на встрече мощнейшую программу. Скоро вывесим на сайт.
499 ·
Ссылка
нажмите — покажем
🔥 Сбор профайлов в PHP через excimer и как их отправлять 🚀 В продолжение темы про #observability решил рассказать, как отправлять данные профайлов, собранные через excimer. Надо сказать, что это не самый популярный модуль для сбора профайлов — и, как по мне, совершенно зря. Потому что это расширение максимально тесно интегрируется в PHP и даёт минимум нагрузки на процессор ⚡ Минусы? Конечно — отсутствие визуализации из коробки. Но визуализаторов полно: Pyroscope от Grafana, например. Или Speedscope. Проблема в другом — как туда всё это отправить, ведь excimer не умеет ни в OpenTelemetry, ни в какой-нибудь другой удобный формат. Что делать? А ничего — написать враппер и адаптеры самому 😎 Чем я и занялся. В итоге появился open source пакет 👩‍💻 https://github.com/excimetry/excimetry Получился, как по мне, весьма удобный. Я сразу добавил интеграцию с клиентами по OpenTelemetry, данные идут в бинарном формате через protobuf. Есть поддержка: ✅ Pyroscope ✅ Speedscope ✅ Выгрузка на файл ✅ Профайлинг консольных команд Вот пример использования use Excimetry\Profiler\ExcimerProfiler; use Excimetry\Exporter\CollapsedExporter; use Excimetry\Backend\PyroscopeBackend; // Create a profiler $profiler = new ExcimerProfiler(); // Start profiling $profiler->start(); // Your code to profile here // ... // Stop profiling $profiler->stop(); // Get the profile $log = $profiler->getLog(); // Send to Pyroscope $exporter = new CollapsedExporter(); $backend = new PyroscopeBackend( 'http://localhost:4040', // Pyroscope server URL 'my-application', // Application name ['env' => 'production'] // Labels ); // Send the profile to Pyroscope $backend->send($log); // You can also set the backend to send asynchronously $backend->setAsync(true); $backend->send($log); // Returns immediately, sends in background // Add custom labels $backend->addLabel('version', '1.0.0'); $backend->addLabel('region', 'us-west'); Честно, не знаю, насколько далеко это всё зайдёт — но
5 · 861 ·
D
Ссылка
нажмите — покажем
🌙 Проект: MoonShine 🛠 Задача: Миграция с @popperjs/core на @floating-ui в MoonShine (4.x) Описание: Библиотека @popperjs/core, используемая в MoonShine для позиционирования всплывающих элементов (tooltip, dropdown и т.д.), переехала в Floating UI. Теперь вместо @popperjs/core следует использовать @floating-ui/dom. Цель: В ветке 4.x заменить использование @popperjs/core на актуальную версию из floating-ui. Это позволит избежать зависимостей от устаревшей библиотеки и получить доступ к новым возможностям и оптимизациям. Убедиться, что: - dropdown, select, tooltip, модальные окна и прочие компоненты позиционируются корректно; - работает auto-update позиции при изменении layout; - тесты проходят
806 ·
D
Ссылка
нажмите — покажем
Ben Ramsey предлагает обновить лицензию PHP. Вместо старых кастомок перевести Zend на BSD-3, а PHP на BSD-4. Думаю, Ben Ramsey многим из нас известен благодаря своему пакету ramsey/uuid, который стал де-факто стандартом для UUID, хотя, вероятно, симфонисты о нём уже позабыли и используют symfony/uid. Но знаете ли вы, что Ben пошёл дальше в этом направлении? - запилил identifier/identifier — набор интерфейсов для идентификаторов. - зарегистрировал identifier/identifier-implementation — виртуальный пакет идентификаторов. - и запилил под него свою реализацию ramsey/identifier. Кроме UUID, пакет предоставляет айдишники ULID и SnowFlake. Сейчас пакеты не имеют стабильного тега, но код ramsey/identifier, как заверяет Ben, довольно стабилен. Всё, что ему осталось сделать до релиза: дописать доку и гайды. Что будет с ramsey/uuid? Ultimately, what I’d like to do is get ramsey/uuid to start using the identifier/identifier interface and then maybe use ramsey/identifier under the hood, making it easier for folks to start transitioning away from ramsey/uuid. В наших проектах ramsey/uuid активно используется и списывать со счетов его рано. Однако, в Cycle ORM уже начата работа над новым пакетом cycle/entity-behavior-identifier на смену старому. Спасибо Adam Dyson (@puzzledpolymath) и остальному инициативному сообществу!
678 ·
А
Фотография
нажмите — покажем
⭕ Cycle ORM: помочь в ревью UPSERT Участник сообщества предложил жирный PR, добавляющий UPSERT в Cycle. Я сейчас сфокусирован на других задачах, поэтому нужна помощь с этой. Можно ревьювить чисто в своих компетенциях, главное обозначить их в комментарии. Но желательно знать, что такое UPSERT и как он используется. Что можно ревьювить: - API в Query Builder'е. - Тесты (корректность и полнота тестов). - Комментарии. - Кишочки. На картинке показано, что нажимать, чтобы предлагать изменения: выделяете несколько строк, жмякаете +, кнопка +- для предложения правок. 👩‍💻 https://github.com/cycle/database/pull/231
1 · 737 ·
А
Ссылка
нажмите — покажем
Кто хочет помочь Yii3, но не уверен в своём коде, есть две лёгких, но очень полезных задачи: - https://github.com/yiisoft/friendly-exception/issues/37 - https://github.com/yiisoft/error-handler/issues/148 Нужно наделать скриншотов, показывающих фичи, и закинуть в README пакетов + оформить в виде pull request.
3 · 897 ·
Ссылка
нажмите — покажем
🖼️ PHP Opcodes Language Плагин для IDEA Ultimate / PHPStorm с языковой поддержкой синтаксиса PHP опкодов. Если у вас есть опкоды и вы не знаете куда их деть, то можно положить в файл с расширением .phpo и плагин сделает подсветку и небольшую навигацию. На текущий момент сделано достаточно для комфортного чтения опкодов, но в будущем появится и инспекция с анализом ваших опкодов. Где и как их собирать удобно – это тема для другого плагина. Он уже в паблике, но полноценной интеграции с Opcodes Language нет. 🔤🔤 https://plugins.jetbrains.com/plugin/27833-php-opcodes-language 👩‍💻 https://github.com/xepozz/php-opcodes-language-plugin
4 · 920 ·
D
Dmitrii🖼️ PHP Opcodes Language Плагин для IDEA Ultimate / PHPStorm с языковой поддержкой синтаксиса PHP опкодов. Если у вас есть опкоды и вы не знаете куда их деть, то можно положить в файл с расширением .phpo и плагин сделает подсветку и небольшую навигацию. На текущий момент сделано достаточно для ком
#php Для любителей изучать новые вещи, могу предложить заняться добавлением примеров опкодов для доки при наведении на опкод: - Открываете сборник опкодов - Клонируете определение опкода в плагине - Описываете его назначение и примеры: пхп + опкоды Готовые опкоды можно взять отсюда, остальные придется искать / изучать исходники 👩‍💻 Ссылка на файл, в который нужно добавлять 👩‍💻 Ссылка на php-src со списком последних опкодов
2 · 997 ·
D
Ссылка
нажмите — покажем
Rector-правило для соблюдения AAA паттерна в тестах По результатам моего опроса почти половина разработчиков пользуются этим паттерном при написании тестов, но я лично периодически забываю "отбивать" секции комментами Теперь можно делегировать это Rector'у - добавил правило EnforceAaaPatternRector. Оно просто вставляет комментарии (и удаляет старые, если они неверно расположены), например: public function testFoo(): void { // Arrange $date = new DateTimeImmutable('2025-01-01'); // Act $formatted = $date->format('Y-m-d'); // Assert self::assertEquals('2025-01-01', $formatted); } Если же ваши тесты изначально не структурированы под это, то будут мисплейсы. Например, если вы делаете запрос, ассерты на него, потом новый запрос и новые ассерты (так часто тестят валидацию/авторизацию). Надеюсь, правило поможет сделать такие нарушения более явными на кодревью
2 · 800 ·
А
Ссылка
нажмите — покажем
Релизик в хату, господа программисты 🎧 https://github.com/wayofdev/laravel-cycle-orm-adapter/releases/tag/v5.0.0 возможно вам будет интересно посмотреть коммит под капотом релиза: https://github.com/wayofdev/laravel-cycle-orm-adapter/pull/759 Из хайлайтов: 🔧 пофикшены все ci/cd: • починил psalm • починил SQL Server тестирование с правильными ODBC драйверами 🗄️ для cycle'истов будет интересен этот файл: https://github.com/wayofdev/laravel-cycle-orm-adapter/blob/master/.github/workflows/testing-mssql.yml (тут я сделал полную настройку SQL Server в GitHub Actions с ODBC драйверами, правильными health checks, и совместимостью с ubuntu-latest) 📦 апгрейд зависимостей: • orchestra/testbench до ^10.0 для Laravel 12 поддержки • поддержка Laravel 12.x наряду с 10.x и 11.x 🐛 пофикшен баг #752: • контейнер Laravel теперь возвращает одинаковый инстанс для ORM::class и ORMInterface::class • больше никаких "duplicate key value violation" ошибок при апдейтах entities 📚 будет интересно для тех кто в PDD и CDD: • https://github.com/wayofdev/laravel-cycle-orm-adapter/blob/master/.cursor/development-guidelines.md - гайдлайны для AI-assisted разработки с реальными примерами • https://github.com/wayofdev/laravel-cycle-orm-adapter/blob/master/.cursor/testing-guidelines.md - гайдлайны для агентного тестирования (эти файлы дают готовые паттерны для эффективной разработки с AI ассистентами, TDD подходы для багфиксов, Docker workflows, multi-database тестирование, и best practices из реального опыта проекта) cc: @roxblnfk @butschster cc: https://github.com/wayofdev/laravel-cycle-orm-adapter может ли автор выпустить релиз с laravel 12 фиксом?
2 · 774 ·
D
Ссылка
нажмите — покажем
Начался Hacktoberfest 2025 Если выполнить задачи в числе первых 10_000 участников, то можно выиграть футболку. Но в РФ её всё-равно не доставят. Однако, пофиг на футболку. Давайте просто делать Open Source вместе, хотя бы в этот месяц. Пара советов: Советую любой вклад в репозиторий начинать с обсуждения: - Написать в Issue, что собираетесь взять задачу на себя и уточнить, есть ли вещи, на которые стоит обратить внимание. - Найти ответственного и пнуть в чате. - Обсудить объём работ, чтобы не делать всё или не попасть в ситуацию, когда часть работы уже сделана где-то ещё. По Pull Request советую: - Не делать то, что выходит за рамки Issue, не изменять левые файлы. - Не делать Force Push, особенно после ревью. - Не делать большие PR. Это в продуктовых проектах большие изменения проходят с меньшими замечаниями. В опенсорсе большой PR == больше работы для ревьювера. Вот пара направлений сходу: 1. @terabytesoftw из Yiisoft докладывает: сейчас Yii2 покрыт тестами на 75%. Давайте добьём до 100%. PR is welcome 2. Подгон от @butschster: ишуи с тегом Good First Issue в репозитории CTX и for-contributors в Buggregator. 3. Ну а я буду просто очень счастлив, если кто-то доделает этот PR (можно прыгнуть на ветку автора, запушить её в свой форк, доделать и затем сделать новый PR) В PHP сообществе есть ещё пара мест: - Общий канал по пыховому опенсорсу, в который можно прийти и как мейнтейнер (хранитель кодовой базы), и как контрибьютор (участник, вкладчик). - Тема опенсорса в нашем чатике, где можно полулзить или обсудить что-то посложнее, чем Good first issue. ——— Кстати, открытое ПО тесно связано со свободными лицензиями. И тут возникли мысли, а не пора ли нам с Павлом везде внедрять эту лицензию? PS: Спасибо Владу Шашкову, который следовал этой лицензии и угощал меня пивом на ПыхКонф'2025 🍻
1 · 674 ·
Ссылка
нажмите — покажем
📣 Infection – библиотека для мутационных тестов Infection довольно круто инструменты для проведения мутационных тестов: если тесты проходят, то библиотека меняет исходных код и запускает ваши тесты заново. Работает здорово, становится всё быстрее, но нет поддержки в IDE. Я сделал плагин для запуска Infection и раскраски текста в редакторе в красный с обозначением что за тест упал. Однако, более логичным было бы сделать инструменты как для запуска PHPUnit/Codeception. Они не делают отдельных интеграций, а используют формат TeamCity для логирования в stdout. Этот лог кушает IDEA, вырезает (для удобства чтения) и строит по нему дерево тестов и их ошибки. Вот для Infection такого логгера сейчас нет. Автор сделает, но ближе к концу недели скорее всего. Если у вас есть силы и желание законтрибьютить в Infection, то переходим по ссылке и хватаем тикет. https://github.com/infection/infection/issues/2446 TeamCity: https://www.jetbrains.com/help/teamcity/2025.07/service-messages.html#Nested+Test+Reporting
2 · 831 ·
D
А
Ссылка
нажмите — покажем
🤎 Драйвер для NATS от Thesis! Каждый, кто пишет на Golang, наверняка слышал про NATS. Это платформа для обмена сообщениями, состоящая из двух основных частей: Core NATS (publish-subscribe с at-most-once гарантией и request-reply) и JetStream (персистентные стримы а-ля Kafka). Мы написали новый неблокирующий драйвер для NATS под PHP, который поддерживает все основные возможности платформы: • publish-subscribe, • request-reply, • jetstream, • key-value хранилище, • объектное хранилище, • атомарные счётчики на основе CRDT, • пакетная публикация, • планировка сообщений. composer require thesis/nats $nats = new Nats\Client(Nats\Config::default()); $nats->subscribe('foo.*', static function (Nats\Delivery $delivery): void { dump("Received message: {$delivery->message->payload}"); }); $nats->publish('foo.bar', new Nats\Message('Hello World!')); Текущий релиз — 0.2.0, но некоторые уже используют драйвер в продакшне! К мажору шлифанём по мелочи и добавим поддержку NATS Service. А ещё после статьи на Reddit нам поставил звезду Ocramius. 😅 GitHub | Thesis Community | nats.io
2 · 987 ·
А
Ссылка
нажмите — покажем
Сегодня состоялся релиз open-source админки MoonShine v4! Вкратце по нововведениям рассказывается (и показывается) в этом промо-ролике: https://youtu.be/3BXkf6WYEJ8 А вечером в 19:00 (мск) будет прямой эфир, где автор (Данил Щуцкий) всё подробно расскажет! Из основного: - новый дизайн и вёрстка - генератор палитр для MoonShine - создавать цветовые схемы теперь просто - TailwindCSS обновлён до версии 4 - новая архитектура - FortyFive - AI-powered инструмент для быстрой разработки админок на базе MoonShine - и многое другое! 11 ноября в 19:00 (мск) на CutCode! https://www.youtube.com/live/ynKqr9zxDzk?si=1aulrPoZ_hpH-clI
1.7K ·
D
Ссылка
нажмите — покажем
True Async PHP Edmond Dantes призывает всех к обсуждению особенностей реализации нашумевшего True Async RFC. Если вы делаете фреймворки или библиотеки, которые работают (или хотелось бы) с асинхронностью; пишите на других языках с поддержкой асинхронности и параллелизма или просто хотите что-то добавить дельного, то заходите в обсуждение. Чем быстрее закроются все вопросы, опасения и корнер кейсы, тем быстрее PHP начнет нагинать Go! Цитата Edmond’а: Итак господа все желающие, приглашаю вас к обсуждению. На текущем этапе считаем, что никакого RFC не было. В теме ключевой вопрос. Он видимо и будет обсуждаться ближайшее время. 👩‍💻 https://github.com/true-async/php-true-async-rfc/discussions/8
22 · 5.3K ·
А
Ссылка
нажмите — покажем
Всем привет! Нужен фидбек по проекту. Это сервер приложений на PHP (ZTS), заточенный под работу в Docker и Kubernetes и двигающийся в этом направлении. Буду очень признателен, если вы попробуете его и поделитесь фидбеком. Особенно интересны мнения о самом проекте, архитектуре, документации и сайте. Приветствуются любые отзывы - позитивные и не очень. Фидбек от ваших AI-агентов тоже приветствуются. 😁 Писать можно в личку, email, комментарии или создавать ишью на GitHub. Весь код написан с помощью LLM, а архитектура и технические решения - мои. Большое спасибо. https://github.com/oxphp/oxphp
3 · 234 ·

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем