Обновить
128K+

PHP *

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

61,11
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Интернет или ничего: как заставить PHP-разработчика ERP-системы писать под Windows

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели3.9K

"Если вашего бизнеса нет в Интернете, то вас нет в бизнесе! Скоро на рынке останется два вида компаний: те, кто в Интернете и те, кто вышел из бизнеса." 

А потом вдруг интернета не стало и нужно было срочно что-то придумать для работы нашей ERP-системы оффлайн

Что попробовали и что получилось

Новости

Файловые отчеты для корпоративного портала на Bitrix: наш опыт разработки

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели5.2K

Привет, Хабр! Меня зовут Леонид, я ведущий PHP-разработчик в НЛМК ИТ.Наша команда отвечает за сервисы HR-направления на едином корпоративном портале (далее – ЕКП), а также занимается развитием и поддержкой корпоративных сайтов.

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

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

Читать далее

Стриминг ZIP‑архивов на лету с nginx + mod_zip — просто, как 2 байта переслать

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.2K

В проекте пользователям регулярно нужно скачивать наборы документов в виде архива. Изначально архивы формировались только из файлов внутри системы, но задача усложнилась, когда потребовалось добавлять внешние источники. В статье я разбираю решение на базе nginx mod_zip и потоковой генерации архива, позволяющее собирать ZIP «на лету» с минимальной нагрузкой на сервер. Также я подготовил простое демо, где можно всё попробовать самостоятельно.

Читать далее

Практическое махоботоводство в 2026 году. Часть 4: Важная новость и сообщения с вложениями

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели8.5K

Четвёртая часть в основном посвящена комбинации вложений разных типов при публикации сообщений. Кроме того, для махоботоводов, не следящих за изменениями в документации MAX Bot API, есть не самая приятная новость; с неё и начнём.

Читать далее

PHP 8.6: дата релиза, предстоящие возможности и статус RFC

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели9.1K

Уже много лет PHP выпускает мажорные версии примерно в конце ноября. PHP 8.5 вышел 20 ноября 2025 года, а PHP 8.4.0 — в конце ноября 2024 года. Если проект сохранит тот же ритм, PHP 8.6 с наибольшей вероятностью выйдет в третью неделю ноября 2026 года. Разумно ожидать релиз в четверг (как и у последних мажорных версий), так что ориентируйтесь примерно на 19 ноября 2026 года или 26 ноября 2026 года, а точная дата будет зависеть от того, сколько потребуется RC.

Читать далее

Как учебные примеры Factory Method ломают SOLID

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели7.5K

Заметил такую особенность во многих учебных статьях и туториалах: в популярных объяснениях паттернов часто не хватает оговорки, что ради упрощения объяснения в примере нарушены принципы SOLID.

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

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

Читать далее

Thrun: как я устал от Horizon и написал свой многопоточный воркер с корутинами

Время на прочтение8 мин
Охват и читатели8.9K

Сотни тысяч I/O-задач, десятки воркеров и гигабайты памяти на обработку очередей. В какой-то момент мне стало интересно, можно ли решить эту задачу иначе. Так появился Thrun —runtime worker на потоках и сопрограммах. В статье разбираю архитектуру и результаты сравнений с Horizon.

Читать далее

Практическое махоботоводство в 2026 году. Часть 3: подробно про загрузку файлов

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

Первая часть. Общие вопросы — https://habr.com/ru/articles/1047336/

Вторая часть. Установка библиотеки и пример работы с ней — https://habr.com/ru/articles/1048882/

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

Читать далее

Разработка длиною в 3 года: как я писал свой PHP CMS/Framework Gy, «убийцу» Битрикса, весом 350 Кб

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели6.7K

Под катом делюсь обзором своего самописного PHP-фреймворка Gy — попытки сделать легковесного «убийцу» Битрикса весом 350 Кб. Расскажу, как я реализовал вызов компонентов, зачем написал кастомный SQL-движок на текстовых файлах PhpFileSql.

Костыли, велосипеды, 3 года разработки по выходным, 315 коммитов, 14232 строки кода, поддержка практически всех версий PHP и ровно 0 пользователей.

Читать далее

Как я оптимизировал xenforo

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели8.9K

История о том, как я загнал главную страницу форума с 88 запросов до 15, выяснил, что половину работы делал впустую один невинный аддон, и в конце снял ещё четверть серверного времени строчкой в конфиге — не сломав при этом ничего из того, что работало. А заодно — полная документация на стек из четырёх своих расширений и preload, на которых форум сейчас и держится.

Читать далее

Как я php фреймворк писал

Время на прочтение19 мин
Охват и читатели7.7K

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

Большинству писать свой фреймворк не нужно от слова совсем. Берете Symfony, Laravel, Spiral, [ваш любимый фреймворк], нужный набор библиотек и решаете продуктовую задачу. Это разумный путь.

Зачем тогда этим занялся я? Если кратко, то потому что могу и хочу, если не очень кратко, то мне было интересно написать свой PSR-совместимый фреймворк. Все началось еще в середине десятых. На тот момент недавно вышел PHP 5.6, приняли PSR-7, позже появился PSR-15, и сборка своего велосипеда на этих новомодных абстракциях, с middleware-пайплайном, показалась мне весьма полезным и увлекательным предприятием.

За основу было решено взять nyholm/psr7, PHP-DI, для отправки ответа прикрутил laminas/httphandlerrunner, конфигурация была написана с оглядкой на тот же laminas, а middleware-пайплайн, фабрика для них, мапшрутизация, app-интеграция, провайдер аутентификации, экспорт конфигурации (в том числе экспорт замыканий) и skeleton-пакет были написаны с нуля. На это ушло примерно два или три года, и где-то к 2020 была собрана первая рабочая версия.

Потом я то забрасывал проект, то возвращался к нему вновь, то переписывал куски полностью. В 2025 году решил в очередной раз переделать все. Реализовать это устремление сильно помогло развитие кодинг-агентов. Сначала Claude Code, позже Codex. Большой объем кодовой базы был переписан или написан полностью с нуля.
Если после прочтения последнего предложения ты, дорогой читатель, почувствовал как свербит седалищный нерв, то не торопись писать свое фи или закрывать статью. Текст ниже не о вайб-кодинге и не о том, как можно легко и круто вкатиться в разработку не хуже интерпрайз-уровня, не имея никакой экспертизы в вопросе.
Кодинг-агенты хорошо решают задачу по написанию бойлерплейта, хотя, будем честны, многие другие задачи они тоже решают на достойном уровне.
В моем случае я занимался проектированием интерфейсов, архитектурой, написанием промптов, ревью и вычиткой README, а машина писала код, README, тесты, наводила на нужные мысли, предлагала, где можно посмотреть решения.

Читать далее

Практическое махоботоводство в 2026 году. Часть 2: библиотека для yii2

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели5.5K

Это вторая публикация на тему практики махоботоводства. В первой были рассмотрены общие вопросы создания ботов в MAX, некоторые отличия Bot API от аналогичного у Telegram и Hello, world на чистом PHP. Здесь начнём освоение обещанной в первой части библиотеки. Чтобы не перегружать сегодняшний материал, рассмотрим установку библиотеки, опишем учебную задачу по отправке запросов через Bot API и разберём выполнение её первой части. Остальное оставим на последующие публикации; пока не знаю, сколько даже их всего будет (если, конечно, успею всё здесь опубликовать, пока всякие злобные не заминусовали карму).

Читать далее

Модульная архитектура против хаоса: как ограничить контексты в большом монолите

Время на прочтение10 мин
Охват и читатели10K

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

Читать далее

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

Технический и продуктовый мониторинг за кастомизациями Битрикс24: как настроить и на что смотреть

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели8.6K

Рассказываем и показываем, как можно использовать мониторинг за кастомизациями Битрикс24. Для работы используем телеметрическую инфраструктуру на базе OpenTelemetry Collector — проект github.com/bitrix-tools/b24-ai-starter-otel.

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

Читать далее

Как я писал Телеграм-бота. На Вордпрессе

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

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

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

Я знаю что к PHP и к Вордпрессу некоторые относится как минимум неоднозначно, а как максимум пренебрежительно. Но уверен, что во многих случаях бот на Вордпрессе это отличное решение.

Читать далее

«Fix typo»: как в PHP закоммитили бэкдор и почему composer install — это акт доверия

Уровень сложностиСредний
Время на прочтение24 мин
Охват и читатели8.1K

Каждый composer install — это акт доверия: вы запускаете на CI и в проде код, который собрал и опубликовал кто‑то другой, а проверяете обычно лишь хеш в composer.lock. Но хеш отвечает на вопрос «тот же ли это байт, что вчера», а не «кто и из чего его собрал».

Реальные инциденты показывают цену этого доверия: в 2021-м в исходники PHP закоммитили бэкдор от имени Расмуса Лердорфа; в xz вредонос жил в release‑архиве, которого не было в git; у популярного GitHub Action переписали теги и слили секреты из тысяч пайплайнов. Между кодом на ревью и артефактом в вашем vendor/ — длинная цепочка, и атаковать можно любое звено.

В статье сначала разбор: как устроены эти атаки и почему GPG, хеши и composer audit закрывают цепочку лишь частично. Затем ответ индустрии — Sigstore: подпись без управления ключами. И главное — практика на PHP: подписываем релиз в GitHub Actions без единого секрета, проверяем эталонным gh, из CLI и прямо из кода с типизированным SLSA‑провенансом, мониторим журнал Rekor. С рабочим кодом и честной моделью угроз: что подпись ловит, а что нет.

Разобрать цепочку поставок ПО

OpenAPI без #[OA\...]: как я сделал генератор документации для Symfony

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели7.3K

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

Тогда это звучало как начало анекдота, но мне было не до смеха.

С тех пор я сменил работу. И, как будто вселенная решила проверить моё чувство юмора, я снова вижу API, где контракт живёт рядом с кодом в ручных #[OA\...] атрибутах.

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

Читать далее

Мы сделали игровую платформу без опыта в разработке. Рассказываем, как она устроена

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели7.8K

Продолжаем рассказывать о том, как создали онлайн-платформу Playforma. Сегодня смотрим и разбираемся, что у нее внутри.

Читать далее

Как я делал бесплатное приложение для своей группы прославления

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

Это история про то, как боль из реальной жизни превращается в код. Без стартап-питчей, без «мы дизраптим рынок», без раунда инвестиций. Просто человек, который двадцать лет назад писал на PHP, вернулся к коду — и довёл проект до рабочего состояния, потому что иначе его команда так и продолжала бы путаться на служениях.

Приложение называется Prayer & Worship. Оно бесплатное — и остаётся таким для всего, что нужно команде на служении. Ниже расскажу, как оно появилось, на чём держится и где проходит та единственная граница, за которой бесплатно уже не получится.

Читать далее

Практическое махоботоводство в 2026 году. Часть 1

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели12K

Всем привет. Последние несколько месяцев (где-то с февраля-марта) мне пришлось активно взяться за разработку чатботов для MAX. Когда только пытался изучить в прошлом году эту тему, поиск материалов по этим вопросам дал несколько странные результаты: вроде что-то есть и описано, а бота создать «сейчас не получится, попробуйте позже». Эту проблему впоследствии частично решили, но актуальности материалам, на мой взгляд, не то что прибавилось, и тема скорее игнорируется. Поэтому для тех, кому ставятся такие задачи, задумал несколько публикаций по практике создания чатботов в MAX, а также поделиться своей библиотекой для yii2 (она уже есть и вовсю используется в production на нескольких проектах, но пока не в полном объёме, сейчас активно дорабатывается и причёсывается; к следующей публикации надеюсь дописать и выложить).

Читать далее
1
23 ...