Обновить
64K+

PHP *

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

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

От рефакторинга до психотерапевта: как мы переписывали карточку задачи в Битрикс24

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

Привет! Никита Щербо на связи, backend-разработчик и тимлид в Битрикс24.

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

Читать далее

Joomla-дайджест. 1-й квартал 2026 года

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

Все главные новости из мира Joomla за 1-й квартал 2026 года в одной статье. Традиционно дайджест собирает новости сообщества, релизы, расширения, интеграции, видео и статьи из мира Joomla. Прошлый выпуск доступен на Хабре.

Читать далее

Укрощение 1С-Битрикс: оптимизация новостного сайта, который падал под нагрузкой

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

Привет, Хабр! Расскажу, как мы спасли крупный новостной сайт ugra-news.ru от постоянных падений — без покупки нового железа и переписывания с нуля. Только точечные оптимизации, знание архитектуры Битрикс и немного детективной работы. Приступим.

Читать далее

Как делать приложения для Маркетплейса Битрикс24 и не сойти с ума: подводные камни, которых нет в документации

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

За пару лет я сделал с десяток приложений для Маркетплейса Битрикс24 — коннекторы мессенджеров, роботы, iframe-панели. На PHP, TypeScript и Python. Каждый раз одно и то же: документация разбросана, примеры устарели, а реальные подводные камни вылезают только в продакшене.

Эта статья — сборник всего, что я хотел бы знать перед тем, как начать: формат токенов при установке, мультитенантность, обновление OAuth, петля сообщений в коннекторах и ещё десяток граблей с кодом и решениями.

Читать далее

0.0023 секунды на генерацию: зачем я собрал «стальной» движок на PHP в эпоху жирных CMS

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

Превед участникам регаты! Все началось в те времена, когда интернет был диким, модемы выли, а тру-кодеры мерили крутость не количеством звёздочек на Гитхабе, а чистотой своего кода и умением впихнуть невпихуемое в пару килобайт. Я начинал вариться в кодинге ещё в золотую эпоху RUWAP (2007–2014гг). Потом был перерыв, и вот, год назад я решил вернуться. Зайдя в современную веб-разработку, я испытал культурный шок. Простые визитки и блоги теперь весят мегабайты, тянут за собой гигабайты зависимостей из npm и ворочаются на сервере по полсекунды. Ангуляры, Реакты, монструозные Drupal и WordPress — всё это превратило веб в вязкое болото. Нам с моей напарницей-нейросетью Асси (Аськой) стало тошно. «Низачот!» — подумали мы.

Читать далее

Web-панель v2 для для управления VPN серверами

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

Я выпустил вторую версию PHP-веб-панели для управления Amnezia VPN. Теперь это не просто интерфейс к одному серверу, а полноценная система управления VPN-инфраструктурой: 9 протоколов, роли, лимиты, метрики, резервные копии, Docker-управление удаленными хостами и REST API для автоматизации. Проект открыт и доступен на GitHub.

Читать далее

Как я перестал платить за мусорные лиды

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

Платный трафик на лендинг с формой захвата — это почти всегда мусорные заявки. Номер 123, номер 1111111, четыре цифры вместо телефона. Заявка засчитана, деньги за клик списаны, позвонить некому.

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

Читать далее

AI для PHP-разработчиков. Часть 5: От массивов к GPU: как PHP-экосистема приходит к настоящему ML

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

Можно ли вообще делать машинное обучение на PHP — или это изначально плохая идея? Почему PHP-массивы плохо подходят для математики и быстро упираются в предел, как появились Tensor и NDArray, и как всё это в итоге приводит к GPU – разберёмся на практике.

Читать далее

Symfony Serializer

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

В Symfony есть встроенный компонент Serializer, который покрывает 90% задач. Но его часто обходят стороной, то ли по привычке, то ли из-за того, что документация показывает только тривиальные примеры. А между тем, Serializer — гибкий и вполне годный инструмент, если понимать его архитектуру.

Разберём, как он устроен.

Читать далее

Testo. Бета-тестирование открыто

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

Новый фреймворк тестирования Testo готов к испытаниям.

В статье: причины появления Testo; его фичи в краткой форме и в примерах; быстрый старт; что дальше.

Читать далее

Типобезопасная работа с массивами PHP, ускоряемся в 4 раза

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

Всем привет!

Эта статья больше веха для себя, чем полезная информация для кого либо, но если вам близка тема парсинга API-ответов, то думаю вам будет интересно.

Что получилось

От базовой версии получилось ускориться в 4 раза, отставание от wplake/typed сократилось до "всего лишь" x2, если вам критична скорость вам к wplake/typed, если вам критична читаемость выбирайте sbwerewolf/language-specific.

Читать далее

OpenGL в PHP не привлекая внимания санитаров: OpenGL Расширения

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

В предыдущей статье мы подключали OpenGL. Но подключали его без уважения… Давайте сделаем это как надо!

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

Давайте разбираться, как с этим жить.

Читать далее

DI‑контейнер Symfony: autowiring, теги и compiler passes

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

DI-контейнер — сердечко Symfony. Контроллеры, сервисы, слушатели событий, консольные команды, Voter, нормалайзеры — всё это сервисы, которые живут в контейнере и получают зависимости через него.

Разберём три уровня глубины: autowiring для повседневной работы, теги для расширяемых архитектур, compiler passes для магии уровня фреймворка.

Читать далее

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

UseCase или как описывать бизнес-процессы в коде

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

UseCase - как организовать своё приложение с точки зрения бизнес-процессов, чтобы не погрязнуть в хаосе сервисов, контроллеров и разрозненной логики.

Узнать как это

SOLID в реальном мире: SRP без архитектурных космолетов

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

Всем доброго дня! На связи Валевич Артем, тимлид в AGIMA. Рано или поздно каждый разработчик сталкивается с необходимостью изучить принципы SOLID. Интернет полон теоретических статей с абстрактными примерами — треугольниками, фигурами и системами заказов. В таких примерах всё выглядит красиво. Но когда дело доходит до продакшен-кода, возникает логичный вопрос: как применять эти принципы на практике и не превратить проект в архитектурный космолет? Разбираемся.

Дисклеймер: статья предназначена для новичков, которые только познают все принципы хорошего кода.

Читать далее

PSA (Project Specific Autocomplete) — плагин для продуктов IntelliJ

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

PSA (Project Specific Autocomplete) — плагин для продуктов IntelliJ

Хочу представить Вашему вниманию плагин для продуктов IntelliJ, который позволяет создавать:

Автокомплит на основе кода Вашего проекта

Переходы к определению элемента синтаксического дерева (на основе кода Вашего проекта)

Шаблоны кода, состоящие из одного файла (на основе кода Вашего проекта)

Шаблоны кода. состоящие из нескольких файлов (на основе кода Вашего проекта)//

Ссылка на репорзиторий здесь. Для подробностей, прошу под кат.

Читать далее

Voters в Symfony

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

Привет, Хабр!

В каждом проекте рано или поздно появляется логика вида «этот пользователь может редактировать этот пост, а тот нет». И начинается: if ($post->getAuthor() === $currentUser) в контроллерах, в сервисах, в шаблонах. Копипаста расползается, а потом приходит новое требование — «модератор тоже может редактировать, но только в своей категории» — и вы бегаете по двадцати файлам, молясь, что ничего не забыли.

Symfony Voters — механизм, который выносит всю логику авторизации в одно место. Не аутентификации (тип кто ты?), а именно авторизации (что тебе можно?). Разберём, как это работает.

Разобраться в Voter

If else VS switch case VS match — разбираем на уровне opcodes

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

Я почти никогда не использовал switch. Мне всегда казалось, что он ведёт себя непредсказуемо - без break код молча проваливается в следующую ветку. Нестрогое сравнение добавляет сюрпризов. В общем, я писал if/else и не парился.

Но однажды, когда-то давно, мне стало интересно: а что, если switch не просто «другой синтаксис», а реально работает иначе под капотом? Я полез в opcodes и обнаружил кое-что, что изменило моё отношение ко всем конструкциям.

Читать далее

PHPUnit: рабочий нерабочий covers

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

Зачем нужны covers метки? Почему их так хочется сломать? Как это сделать? Рассказ будет извилист, но идея проста: улучшить навигацию, не задев покрытие.

Читать далее

OpenGL в PHP не привлекая внимания санитаров: Привет, OpenGL

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

В предыдущей статье мы открыли окно. Теперь давайте его не просто игнорировать.

Как на счёт вкорячить в него поддержку OpenGL?

Читать далее