Обновить
68.41

PHP *

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

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

Рассылка на миллион: как CDP от БизнесПрофи на базе Битрикс24 помогает оперировать реально огромными базами контактов

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

Привет! Меня зовут Анна Амирова, я из  digital-интегратора БизнесПрофи — мы внедряем и сопровождаем Битрикс24, а еще разработали на базе CRM Б24 полноценную CDP (Customer Data Platform) для работы с большими клиентскими базами, содержащими миллионы записей. 

Решение создавалось последовательно, исходя из запросов клиентов на решение различных задач от A/B тестирования до аналитики. Основной целью было избавить пользователей от зоопарка систем, который обычно используется для рассылок — рассылки через почтовые сервисы, через Whatsapp, Телеграм, подключение ботов и т.д. Часто случалось, что только маркетолог держал у себя в голове количество реальных касаний с клиентом, а работа по сегментации базы и управлению рассылками велась без всякой системы. В этом случае есть риск перегреть базу контактов, при том, что ценность ее очень велика. 

В первой части статьи расскажем о подходах к сегментированию клиентов и их практической реализации в связке с инструментами Битрикс24. 

Модуль CDP является неотъемлемой частью Битрикс24 и позволяет использовать продукт комплексно, как связку для взаимодействия отдела продаж и отдела маркетинга. В некоторых проектах используется именно, как инструмент маркетолога, если компания не использует в операционной деятельности CRM, ввиду организационных особенностей. Мы настраиваем синхронизацию с внешними базами данных, 1С и другими продуктами. 

CDP позволяет сегментировать клиентов по всевозможным доступным критериям, например, выделить покупателей, которые в последний раз делали заказ в определенной категории товаров более месяца назад. Также система умеет создавать аналитические сегменты, сегменты по k-средним, проводит RFM-анализ. Система позволяет строить сегменты как по компаниям, так и по контактам. 

Читать далее

Сбор и масштабирование метрик в PHP Symfony highload: 200k RPM, 50+ серверов и zero overhead с Telegraf UDP

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

«Redis умирает на 200k RPM, Prometheus не успевает скрейпить 50 серверов, а бизнес требует real-time дашборды. Знакомо?»

Пятница, 18:00. Дашборд в Grafana показывает timeout'ы при сборе метрик. Redis, который хранит данные для prometheus_client_php, жрёт 8GB памяти и 100% CPU. Prometheus не успевает опросить все 50+ серверов за отведённые 15 секунд. А в понедельник запускается Black Friday...

Эта статья — о том, как мы перешли с pull на push модель для мониторинга PHP-приложения в highload, почему выбрали UDP + Telegraf вместо классического подхода, и как теперь собираем метрики PHP с 50+ серверов без единого timeout'а.

Читать далее

Duyler — Событийно-ориентированный, неблокирующий PHP-фреймворк

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

В данной статье, я хотел бы рассказать вам о Duyler (производное от Do While) - событийно-ориентированном, «неумирающем» и неблокирующем PHP-фреймворке.

Читать далее

Создаем свой пакет на PHP

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

Хочу поделиться с вами своим опытом, с которым столкнулся, и предоставить шаблон, который написал для пакетов/проектов:
https://github.com/deniskorbakov/skeleton-php-docker

Буду очень рад звёздочке на GitHub и обратной связи после прочтения статьи!

Читать далее

Laravel + Admiral: как не тратить полжизни на авторизацию

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

Если ты в 2025 году ты всё ещё руками собираешь авторизацию на Laravel для своей админки — у меня для тебя плохие новости. Ты либо получаешь удовольствие от страданий, либо просто не знаешь про Admiral. А хорошие новости заключается в том, что это open source фреймворк, который не позволяет не сойти с ума копипаста и рутинной хрени. Вместо этого он делает всё за тебя (что? да!). Ты просто поставишь, настроишь пару штук — и вуаля: авторизация, фронт, работающий бекенд.

В этом гайде я покажу, как без боли и слёз запустить связку Laravel + Admiral с полной авторизацией. Ни строчки лишнего кода, и ни минуты на сомнительные патчи.

Что там еще...

HTMX, AlpineJS, SSR v1/2/3 и SPA. Что к чему

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

HTMX и AlpineJS это две JS библиотеки, которые расширяют HTML специальными аттрибутами и позволяют писать фронтенд без SPA фреймворков.

Это альтернативы React/Vue/Angular и иже с ними. Их появление вызвано усталостью от сложной JS экосистемы и тоской по временам, когда задачи решались с помощью PHP и jQuery.

Я всю жизнь писал JSON API и SPA интерфейсы и моему мозгу трудно было переварить, зачем нужны эти библиотеки и как с ними работать. Поэтому я написал эту статью.

Читать далее

Нужно ли в PHP перед вызовом функций ставить обратный слэш?

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

Несколько лет назад я прочитал статью «How to dump and inspect PHP OPCodes» в которой наконец увидел, что опкоды в PHP действительно существуют. И кроме того, мы, разработчики, которые пишем на PHP на эти опкоды можем влиять, тем самым оптимизируя производительность нашего кода. В статье так же рассказывалось о том, как применение бэкслэшей может ускорить выполнение программ. Я был под впечатлением...

Опкодами (см. Код операции) называется некий промежуточный код, который всё ещё понятен человеку и который выполняется некой исполняющей средой. В случае PHP этой средой является Zend Virtual Machine (она же Zend Engine).

Технология опкодов и виртуальной машины не является чем то уникальным для PHP. Подобный подход использует Java, где опкоды компилируются в их бинарное представление и выполняются Java VM. Исходные коды Java-программ хранятся в файлах с расширением .class (потому что в Java искодники хранятся только в виде классов), а скомпилированные опкоды в файлах с расширением .java. В PHP же исходные коды программ хранятся в файлах с расширением .php. А вот опкоды не хранятся нигде, что вызвало к жизни многочисленные расширения, самым популярным из которых на сегодняшний день является OPcache.

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

Оговорюсь, что в рамках этой статьи я буду называть функции типа explode глобальными, дефолтыми или стандартными подразумевая одно и тоже. Хотя у PHP и есть стандартная библиотека, которая скорее мертва, чем жива, как впрочем и весь PHP :)

Читать далее

Финансовый учет: адаптация приложения для коробочного «Битрикс24»

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

Некоторое время назад нами был разработано и опубликовано приложение Финансовый учет для облачного «Битрикс24». В этом материале мы хотим поделиться как мы занимались портированием его на коробку «Битрикса», почему так решили делать и с какими сложностями столкнулись.

Читать далее

Рефакторинг системы рекомендаций: как мы перешли с монолита на микросервисы

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

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

Что у нас было

Проект состоял из двух частей.

Читать далее

PHP Compile Time Generics: да или нет?

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

Это небольшой разбор поста от PHP Foundation: Compile time generics: yay or nay?, пропитанный личным мнением.

Читать далее

Путь из продактов в прогеры: выясняю, почему кодеры «гады» такие, делают только баги и плохо соблюдают сроки

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

Путь из продактов в прогеры: выясняю, почему кодеры "гады" такие, делают только баги и плохо соблюдают сроки

Статья будет полезна для тех, кто менторит стажеров/джунов-программистов, и для самих смельчаков-новичков в этом нелегком деле.

Читать далее

Библиотека для администрирования 1С через RAS/RAC на PHP — RacWorker

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

Доброго времени суток, меня зовут Тимур. Я являюсь разработчиком на 1С платформе и так получилось что я разбираюсь в Web технологиях, моим любимым языком является PHP, и я подумал почему бы не сделать программное средство для администрирования 1С через web.

Администрировать 1С сервер можно через командную строку при помощи компоненты RAC которая предоставляет только терминальный интерфейс, что немного не удобно.

О компоненте я задумался чтобы самому администрировать 1С немного удобнее, а через Web интерфейс было вообще идеально. И вот что получилось...

Читать далее

Обновления Telegram-бота для технической поддержки: API для внешних источников и новые возможности

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

Всем привет! Вы просили - я сделал! Я выпустил релиз №3 для бота технической поддержки на GitHub.

Прошло уже несколько месяцев с последнего обновления, и бот за это время получил вдвое больше звёзд на GitHub, что очень мотивирует продолжать развитие и поддержку проекта.

За последний месяц ко мне поступило несколько запросов расширить функционал бота за счёт подключения новых источников трафика. Изначально я думал добавить интеграции с популярными мессенджерами, такими как WhatsApp или Viber. Но в итоге решил, что в первую очередь стоит реализовать API, чтобы вы сами могли подключать любые свои источники.

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

Читать далее

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

Хватит спрашивать у синьоров джуниорские вопросы на собеседованиях

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

Я работаю программистом последние 11 лет: первые 5 лет как PHP-разработчик, а последние 6 лет как Go-разработчик. Недавно я сходил на с десяток собеседований, и они меня очень сильно разочаровали.

Читать далее

Зачем я написал очередной велосипед для работы с директориями (спойлер: не совсем велосипед)

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

Вы когда-нибудь сталкивались с плагинами, которые лезут в чужие папки, перезаписывают файлы ядра и превращают git status в ад?

Я — да. И вместо того чтобы мириться с ручным копированием, гигантскими .gitignore и вечными конфликтами, написал dmp — инструмент, который:
 Отслеживает, откуда взялся каждый файл,
 Автоматически разрешает конфликты (или даёт контроль),
 Не ломает IDE (никаких симлинков!),
 Работает с любыми языками и фреймворками.

Для кого:
— Разработчики плагинов/модулей,
— Те, кто устал от git-submodules и rsync,
— Все, кто хочет чистый workflow без монрепозитория.

Читать далее

Паттерн Спецификация: реальный опыт применения

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

Четыре года назад на собеседовании я услышал от интервьюера о том, как замечательно паттерн Спецификация помогает справиться с проблемой разрастания репозитория. Я думаю, многие с этим сталкивались, когда количество методов типа getByThisAndThat(…) улетает за десяток, а то и за несколько десятков, и репозиторием становится пользоваться неудобно.

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

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

Читать далее

MoonVibe: генератор админ-панелей на основе ИИ за 5 минут

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

Хотите сделать админку для Laravel, но не хочешь копаться в коде? MoonVibe — это генератор на базе LLM, которая сделает её за тебя. Просто пишешь, какой функционал нужен в админке — и через пару минут получаешь готовый проект. Работает по API с бесплатными моделями и ставится локально.

Читать далее

Что дал переход на zsh мне, как разработчику?

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

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

Zsh это командная оболочка, то есть программа, которая получает от пользователя команду в текстовом виде и выполняет соответствующие исполняемые файлы, найденные по путям, указанным в переменной окружения PATH.
Zsh является дефолтной оболочкой для macOS, на linux дефолт - bash. Zsh лучше, чем bash в основном благодаря своей очень обширной системе плагинов, модулей, различных тем и т. д.

Например, установив вот такой плагин.

Читать далее

Неочевидный нюанс при изменении пространства имён моделей в Laravel

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

На работе поступила очередная задача: разобраться и устранить странную проблему в работе давно и надёжно работающего сервиса. Проблема заключалась в том, что часть объектов двух видов перестала работать. Причём именно часть объектов.

Сам сервис написан на PHP с использованием фреймворка Laravel и служит для общения с внешней системой.

Поскольку есть внешняя система, то в первую очередь проверил её. Но с ней всё было в порядке. Данные уходили и приходили. И в БД сервиса всё заносилось как надо.

Но при обращении к ресурсам определённых объектов по API не возвращалась часть полей, которые хранятся в связанной таблице, связь типа полиморфное отношение «один-к-одному» («MorphOne»).

Читать далее

Laravel: электронная подпись на сервере с PDF визуализацией

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

Сегодня я хочу поделиться с вами решением, которое позволит вам реализовать подписание PDF-документов электронной подписью и их визуализацию прямо на вашем Laravel сервере.

Читать далее