Как стать автором
Обновить
58.23

PHP *

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

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

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

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

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

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

Читать далее

Новости

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

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

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

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

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

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

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

Читать далее

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

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

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.8K

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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


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

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

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

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

Читать далее

Linux для начинающих: WSL — это читерство. Как Microsoft дал нам Linux без головной боли

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

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

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

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

Наконец, есть и субъективный фактор — привычка. Я с самого начала работал с Windows, и, несмотря на все преимущества Linux, полностью перестроить рабочий процесс оказалось сложно. WSL в этом плане — идеальный компромисс: Linux-окружение под рукой, но без необходимости отказываться от удобств Windows.

Читать далее

The Clean Structure — Универсальная структура PHP-проекта на примере Laravel

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

К написанию этой статьи меня подтолкнуло изучение архитектурных подходов для Vue.js-проектов, а вдохновила - детально описанная методология Feature-Sliced Design.

К сожалению, PHP-сообществу не хватает подобных развернутых рекомендаций, да и вообще, каких-то общепризнанных стандартных подходов в структуре проекта.

Моя статья - это попытка обобщить изученную мною за много лет информацию и сформировать универсальную структуру проекта, основанную на принципах Clean Architecture и модульного монолита.

Читать далее

Как работает EventDispatcher в Symfony

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

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

Сегодня рассмотрим одну из самых сильных сторон Symfony — компонент EventDispatcher.

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

Читать далее

Новый релиз бота технической поддержки: интеграция с ВКонтакте и docker-compose сборка с мониторингом

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

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

Месяц назад я выложил в открытый доступ проект бота для технической поддержки. За это время он собрал более 100 клонирований и 40+ звёзд на GitHub. В Issues начали появляться предложения по доработкам — большое спасибо всем, кто откликнулся. Это дало мощную мотивацию развивать проект дальше.

GitHub - https://github.com/prog-time/tg-support-bot

В этом посте — кратко о ключевых изменениях последнего релиза.

Читать далее

Эффективный поиск с Elasticsearch: как мы повысили конверсию на 27%

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

Хотим поделиться опытом разработки эффективного поиска для одного интересного проекта. Мы подробно рассмотрим, как сделали поиск удобным, быстрым и привлекательным для пользователей, увеличив конверсию на 27% всего лишь за счет грамотной настройки Elasticsearch.

Читать далее

Концепт-идея: PHP (не совсем, конечно :)) для встраиваемых систем

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

Немного предыстории: автор гораздо больше аналитик, дизайнер и системный инженер, чем программист. Однако, несколько Интернет-магизонов когда-то "от корки до корки" сделал. А теперь замутил небольшой хобби-проект на Atmega. Ничего особенного, цветомузыка очередная. И вот, разбираясь с этой штукой, а также общаясь с коллегами, которые реально серьезные программеры, набрел на такую вот мысль...

Читать далее

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

HTTP/2 / HTTP/3 и gRPC на Rust: пишем учебный Mini-Transport

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

Статья-практикум показывает, как устроены HTTP/2, HTTP/3 (QUIC) и gRPC на самом низком уровне. Вместо толстых библиотек мы пишем минимальный учебный фреймворк «Mini-Transport» на Rust (~600 строк): реализуем кодек HTTP/2-фреймов, упрощённый gRPC-протокол и базовую обёртку над QUIC. В результате получаем рабочий echo-клиент и сервер, которые пересылают «hello ↔ world» через собственноручно собранные фреймы. Разбор сопровождается поясняющими схемами, ссылками на RFC, вариантами дальнейшего развития (HPACK, flow-control, TLS/ALPN) и готовым репозиторием для самостоятельных экспериментов. Материал рассчитан на разработчиков, желающих понять «как всё крутится под капотом» и прокачать навыки низкоуровневой сетевой работы в Rust.

Читать далее

Небольшая утилитка WP-Seeders для Вордпресса

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

Массовая генерация разделов для таксономии в WP через массив и команду wp-cli.

Прикольная штука вроде, удобная.

Открыть

Advanced Goroutines Patterns в Go: Fan-out, Fan-in и Pipelines

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

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

Читать далее

Внедряем метрики OpenTelemetry в PHP проект на Yii2

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

Сегодня поговорим о том, как внедрить метрики в формате OpenTelemetry в PHP монолит, построенный на фреймворке Yii2.

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

Читать далее

Go defer: что не сказали в книгах

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

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

Когда вы открываете файл через os.Open() или os.Create(), Go выделяет ресурс операционной системыдескриптор файла.

Читать далее

FastExcelWriter — избавление от проклятия PhpSpreadsheet

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

Наверняка каждый php-разработчик, хоть раз сталкивавшийся с чтением или записью Excel-файлов, знает про библиотеку PhpSpreadsheet (в прошлом - PHPExcel). Это мощная библиотека на чистом php, которая позволяет читать, а, главное, создавать Excel-таблицы. И все с ней хорошо, пока работаешь с небольшим набором данных. Но при работе с большими файлами PhpSpreadsheet начинает чудовищно отжирать память, да и производительность резко падает, и php-скрипт, использующий библиотеку, часто просто отваливается по таймауту. И проблема - в архитектуре библиотеки.

Библиотека PhpSpreadsheet, казалось бы, спроектирована очень правильно: листы таблицы, строки, ячейки, прочие сущности - это все классы, стили, форматы и всевозможные свойства тоже состоят из классов. И когда создается таблица, то в памяти создается огромное количество связанных между собой объектов, им задаются свойства, выполняются всевозможные манипуляции, ячейки заполняются данными, всё-всё это держится в памяти, и пишется в файл только в момент сохранения.

И вот однажды, когда ресурсы на генерацию большого Excel-файла превысили все разумные значения, я начал искать альтернативу известной библиотеке. Альтернатива нашлась. В отличие от PhpSpreadsheet, тут все было упаковано в один класс, возможности по форматированию и стилям - скромнее некуда, но зато XLSX-файл создавался в разы быстрее, а потребление памяти было вообще копеечное. А все потому, что тут был реализован совсем иной принцип - данные не накапливались в памяти, а построчно сразу выводились в файл. Вдохновившись этой идеей, я и создал свою библиотеку FastExcelWriter.

Читать далее

Работаем с Nats в PHP

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

Сегодня затронем такую неожиданную тему как работу с брокером сообщений Nats на PHP. Как оказалось, есть очень мало статей на эту тему, так что попробуем с этим разобраться и реализовать базовую работу с очередью.

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