Обновить
57.92

PHP *

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

No exceptions культ — Rift Miniframework

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

Value object и DTO в PHP (DDD)

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

Кастомный сервер конвертации файлов для Битрикс24

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

Пару слов обо мне

Меня зовут Дмитрий, я являюсь PHP разработчиком. Работаю с Битрикс24, Laravel и Go.

Проблема Битрикса

Как известно, рекомендуемое окружение для Битрикса – их собственная разработка BitrixVM на базе CentOS. Иногда такое окружение не устраивает заказчиков, поэтому выбирают Docker или сервер с установленным LEMP стеком. 

При переходе на окружение отличное от BitrixVM, существует две основные проблемы – отсутствие сервера очередей Push&Pull и сервера конвертации файлов. 

Читать далее

Как сделать Modulith в Symfony

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

Modulith — архитектурный стиль, при котором приложение остаётся монолитом, но код внутри разбит на модули (подпапки) по доменам.

Классическая структура проектов выглядит так:

├── src
├── Command
├── Controller
│ ├── Product
│ └── User
├── Doctrine
├── Entity
│ ├── Product.php
│ └── User.php
├── Message
├── MessageHandler
└── Kernel.php


Структура modulith в Symfony выглядела б так:
├── src
├── Product
│ ├── Command
│ ├── Controller
│ ├── Doctrine
│ ├── Entity
│ ├── Message
│ └── MessageHandler
├── User
│ ├── Controller
│ └── Entity
└── Kernel.php

Разница в том, что в modulith каждый модуль (например Product, User) содержит все компоненты в своей папке, а не по всему проекту.

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

Вдобавок исчезают портянки файлов, когда открываете Entity, а там 30 файлов в столбик

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

Поэтому конфигурацию модулей лучше выносить в сами модули

Читать далее

Нужно ли системному аналитику разбираться в программировании?

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

Мне стало интересно: насколько глубоко системный аналитик уровня Senior должен разбираться в программном коде? Где проходит грань между бизнес-фокусом и технической вовлечённостью?

Чтобы ответить на этот вопрос, я провёл исследование и опросил почти 200 системных аналитиков. Мы выяснили, какие технические навыки сегодня считаются must-have, а какие по-прежнему остаются "по желанию".

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

Читать далее

Первый http сервер на С++, заметки для новичков

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

Решил написать простенькую статейку по следам реализации небольшой программки на С++ под Виндоус, которая содержит в себе TCP сервер. Мы получаем от клиента http запрос. Соединение не защищенное.

На чем реализован клиент нам неизвестно: может на php (curl,socket,stream_contex_create,...), может на js (ajax), вообще может быть на чем угодно.

Надо задача реализовать http парсинг запроса и контента, выполнить задание (на каком-то подключенном к серверу оборудовании) и ответить клиенту о результате.

Примечание: автор реализует http сервер на устаревшем Qt4, используем QTcpServer. Но для http сервера это не принципиально.

Читать далее

Сказ о том, как один программист себе мебель из ДСП на PHP программировал

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


Тут немного о том, как я сделал библиотеку для проектировки простой мебели из ДСП не визуальным методом, а в виде PHP-скрипта.
Вперед, в мир безумия!

Возвращаем Redis в Mercure и немного о static-php-cli

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

Как преодолеть узкие места масштабируемости Mercure HUB, заменив BoltDB на Redis, а так же собрать свою статическую сборку php сервера вместе с Caddy, Mercure, FrankenPHP

Читать далее