Как стать автором
Поиск
Написать публикацию
Обновить
70.69

PHP *

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

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

Observable, random_bytes() и outbox. Материалы с Пыхап #4

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

Свежие доклады о PHP, игра «Было/не было», факап-разгоны и розыгрыш слонов — так прошел четвертый Пыхап, который мы с каналом Пых организовали в офисе Lamoda 19 июня. Делимся материалами со встречи.

Чтобы не пропустить новые митапы от Пых, следите за анонсами и трансляциями в Telegram-канале, на YouTube и VK. А 19 сентября приглашаем на Пых.конф’25 — новую PHP-конференцию для всех.

Читать далее

Open Source: Галерея готовых решений + Telegram-бот для брифов

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

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

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

Первое опубликованное решение — Telegram-бот для автоматического сбора брифов от клиентов.

Читать далее

Тестирование производительности c PHPBench: что и как?

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

PHPBench - это, кажется, крайне не популярный фреймворк для тестирования производительности кода на PHP. По крайней мере за 18 лет он мне ни разу нигде не встретился, а услышал об нём примерно года назад. Фреймворк PHPUnit-подобный, где бенчмарки, как и тесты из PHPUnit объединяются в классы, группы и т.д. и т.п. Чтобы много не болтать, давайте напишем чуть кода и отбенчмаркаем его.

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

Читать далее

Собираем трейс в Laravel и отправляем в Zipkin

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

Привет, Хабр! Меня зовут Александр Белышев. Хочу немного вам рассказать о библиотеке (Laravel Zipkin Tracer), которую разработал изучая трейсинг в php. Рассмотрим что собирает, как собирает и сравним ее с OpenTelemetry.

Читать далее

DevOps-настройка проекта через фрилансера: мой опыт

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

Когда наш стартап на базе платформы FreelanceSpace перерос первоначальный этап, перед нами встал вопрос об автоматизации процессов разработки и деплоя. Раньше мы вручную собирали и выкатывали обновления, но с ростом нагрузки это становилось узким местом. При этом внутри команды не было DevOps-специалиста, и я понял, что самостоятельно не справлюсь — нужен сторонний эксперт. Решение пришло само собой: найму фрилансера с нужными навыками. В качестве площадки для поиска я использовал собственный сайт FreelanceSpace – IT-фриланс-платформу, «№1 для быстрого подбора разработчиков, дизайнеров и копирайтеров»

. Здесь можно было быстро разместить задание и собрать отклики.

Поиск и выбор исполнителя

Я начал с составления краткого описания задачи (в DevOps-терминах это была настройка CI/CD-процессов: сборка, тестирование и деплой). Затем проанализировал несколько вариантов поиска специалиста:

Биржи фриланса. На крупных площадках (например, Upwork или аналогах) легко найти DevOps-инженеров. Как советует опытный специалист, при подборе лучше ориентироваться на рейтинг: «чем он выше, тем лучше»

. Я изучил профили нескольких фрилансеров, особенно смотрел отзывы и выполненные проекты.

Тематика и опыт. Обращал внимание на конкретные технологии в портфолио (Docker, Kubernetes, Jenkins/GitHub Actions и пр.) – мне был важен опыт именно в CI/CD.

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

Читать далее

Загадочный параметр $live_site в configuration.php Joomla. Зачем он нужен?

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

Давным-давно, когда Joomla ещё была маленькой, в неё внедрили параметр $live_site. В ней хранился домен текущего сайта на случай, если Joomla не могла его определить из-за неверной настройки сервера. Нужно это было для разных SEO-компонентов, для использования редиректов и т.д.

Со временем для работы собственно сайта этот параметр перестал быть нужным. Уже в начале 2010-х стали встречаться рекомендации оставлять этот параметр пустым, дабы оный не привёл к лишним проблемам и путанице. Тем более, в web-админке нет места, где его можно указать или посмотреть его значение. Только в configuration.php, а туда смотрят не часто.

Однако, параметр всё же остался в ядре Joomla. Зачем он нужен?

Читать далее

Из боли в удобство: обёртка для расписания пар в колледже (сайт, ВК-бот и SMS)

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

Или как я доставлял расписание студентам в новом формате решая несколько проблем, используя парсинг и PHP 7 в 2017-2021 годах.

Читать далее

Анемичные модели с логикой в сервисах: плюсы и минусы одного из самых популярных подходов к разработке на PHP

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

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

Читать далее

strlen() vs mb_strlen(): Почему 71% PHP-разработчиков ошибаются

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

 В этой статье разберем, как PHP работает со строками и почему даже простой вызов strlen() может привести к неожиданным результатам. На примере крайне простой задачи "что выведет echo strlen('привет!');" посмотрим, что и как влияет на подсчет длины строки, заглянем внутрь реализации strlen() и развенчаем миф о строках как массивах.

Задача в телеге

В одной группе телеграмма с задачами по PHP недавно встретил простой вопрос: что выведет код «echo strlen(‘привет!’);»?
Был вопрос и 4 варианта ответа.

Вроде бы все просто. Но правильно ответили лишь 16%. Наиболее популярным ответом оказался «7», что неверно. Но именно его дали 71% ответивших.

Читать далее

Claude 3.5 Sonnet в роли AI-агента: тестирую работу в цикле с реальным выполнением кода

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

Вчера тестировал мой агент DepthNet на реальных моделях. Это что то вроде "операционной системы для LLM моделей" В прошлой статье пользователи просили привести диалоги, и рассказать подробнее, и тогда я решил более полно осветить вопрос.

Читать далее

No exceptions культ — Rift Miniframework

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

В мире php-ходящих есть мнение, что первое, что сказал Иисус Христос придя в этот мир: "исключения - зло".

Конструкция по типу try { .. } catch (Exception $e) { ..$e->getMessage() } знакома каждому 5 человеку в мире и воспринимается как неотъемлемая часть любой логики на php.

И что в этом такого?

Ничего, кроме того, что из чёткой цепочки обработки запросов ваш код быстро превращается в коллекцию try catch на каждой 3 строке. Это не кажется проблемой до того момента, как дело не дойдёт до разделения приложения на отдельные слои во благо SOLID. Представьте, что в вашей команде >1 человека и все они работают над разными слоями, которые должны между собой взаимодействовать. В подобных ситуациях все участники должны документировать все созданные методы, а так же возвращаемые исключения. И да, это хорошо, но зачастую документация исключений становится невыносимой. Таким образом ваша работа обрастает ненужным слоем прокидывания исключений, которые к слову нужно ещё и создать.

Читать далее

Мосты цифрового мира: клиент-сервер, сервер-сервер

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

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

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

Читать далее

Я создал AI-агента, который думает 24/7 и выполняет реальный код. Вот что из этого вышло

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

Создал экспериментальную систему DepthNet, где AI-агент мыслит циклично, то есть непрерывно, может выполнять PHP-код, управлять своей памятью и живет автономной цифровой жизнью. Протестировал на Claude 3.5 Sonnet — результаты понравились.

Читать далее

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

«Никогда такого не было, и вот опять»: разбираем атаку c эксплуатацией уязвимости в подключаемом модуле Bitrix

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

Привет, Хабр! Меня зовут Никита Полосухин, я старший системный аналитик центра мониторинга и реагирования на кибератаки RED Security SOC. В этом материале я хочу снова поднять тему важности своевременных обновлений и актуализации версий CMS и их компонентов. В мире ИБ про это знают почти все, но вот коллегам из администрирования и бизнеса, я думаю, может быть полезно увидеть, почему хотя бы раз в год надо уделять время проверке и устранению уязвимостей.

В СМИ периодически появляется информация об массовых атаках на сайты на базе Bitrix с использованием уязвимостей в сторонних модулях — например, недавно компания предупреждала об уязвимости в подключаемых модулях от eSolutions и «Маяк».

Мы в центре мониторинга и реагирования на киберугрозы RED Security SOC тоже регулярно видим такие атаки. В этой статье покажем, как они выглядят in the wild, как их выявлять и блокировать их развитие.

Читать далее

Из легаси монолита в модульную архитектуру: проводим рефакторинг и наводим порядок в проекте

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

Привет, Хабр! Меня зовут Владимир Раду, я Backend-разработчик в Рунити. Однажды мы с командой встали перед дилеммой: как навести порядок внутри монолита. Админка одного из сайтов нашей группы компаний — большой и довольно возрастной проект. Он охватывает множество задач и сценариев: от управления ценами до редактирования контента. Со временем стало очевидно, что нужно снижать связанность компонентов и разводить бизнес-части. Так появилась идея перейти к модульной архитектуре.

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

Читать далее

Value object и DTO в PHP (DDD)

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

В чем разница и когда что использовать? Это был один из вопросов, на которые я пытался получить ответ.

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

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

Читать далее

Open Source CRM + Telegram-бот: запись, напоминания, интеграция

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

В рамках проекта по продвижению open-source в России я выложил в открытый доступ Telegram-бота с CRM на PHP + MySQL, который выполняет всю базовую бизнес-логику: он записывает клиентов на услуги, напоминает о визите, собирает телефоны, отслеживает источник заявки, уведомляет администратора, хранит контакты в CRM и делает рассылки. Работает автономно — прямо на Windows, без облаков и внешних сервисов. Подходит предпринимателям, ботмейкерам и самозанятым, кому нужно быстрое, понятное и полностью локализованное решение. Лицензия — MIT. Установил — и автоматизируй бизнес.

Читать далее

Простая интеграция в CMS Bitrix из XML-файла на FTP-сервере с использованием агентов

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

Если вы хотя бы раз сталкивались с интеграцией данных в Bitrix, то знаете: простых задач не бывает. А когда речь идёт о тысячах товаров, нестабильных источниках, сроках и необходимости всё держать в актуальном состоянии — без автоматики не обойтись.

Я — Алексей Яриков, ведущий разработчик команды внешних сайтов НЛМК. Мы ежедневно работаем с веб-платформами компании, отвечая за их надёжность, производительность и свежесть данных. В этой статье расскажу, как мы решили задачу регулярной загрузки и обработки большого объёма данных с FTP в рамках Bitrix — наглядно, с кодом, архитектурой и ошибками, которые мы учли.

Читать далее

Пакет PHP Views — простая шаблонизация проекта с Blade и моделями

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

Большинство PHP фреймворков имеет свои решения для шаблонов, но существует огромное количество PHP проектов, включая CMS вроде WordPress, где коробочные решения отсутствуют.

Обычные PHP шаблоны довольно многословны и подвержены ошибкам. PHP Views призван сделать работу с шаблонами в чистом PHP более простой, гибкой и надежной.

Читать далее

Создание подписи XML документа с использованием Smev-трансформации с помощью php-расширения Crypto Pro

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

В один прекрасный день где‑то кто‑то поменял законодательство и нашей курьерской компании стало нужно передавать данные о доставленных ювелирных изделиях в систему ГИИС ДМДК (это государственная система контроля за оборотом драгоценных металлов и камней). Доступ к ГИИС ДМДК предоставляется в виде SOAP сервиса, куда необходимо передавать подписанные запросы, т. е. подписанные XML‑документы. Одним из требований к интеграции было использование КриптоПро для построения защищенного канала передачи данных. Поскольку КриптоПро уже присутствовал в проекте, это сделало очевидным выбор данного продукта и для подписи передаваемых документов.

В этой статье я расскажу о том, как мы реализовали подпись XML‑документов для передачи в ГИИС ДМДК с помощью расширения КриптоПро phpсades, какие подводные камни встретились по пути и как их удалось обойти.

Читать далее