Оптимальные структуры данных в PHP

Как известно, родных типов данных в php немного. На самом деле в программировании, типов данных конечно же неограниченное множество, особенно когда дело касается деревьев (AA, M, k-d и прочая) Стандартная библиотека php кроме интерфейсов итераторов и автоподгрузки классов предоставляет и более оптимальные типы данных.

Анализ ошибок с XDebug и PHPStorm

XDebug это отличный php-модуль для правильного дебага приложения, который в «старших» языках (читай — не интерпретируемых) уже сразу был встроен в компилятор. Необходимость в полноценном дебаге очевидная в сложных приложениях, где воспроизведение ошибки занимает относительно много времени, а объём данных не позволяет копаться в мегабайтах от print_r(), хотя этот модуль позволяет и такие отчёты

BRMS на php с отражениями

Отражения (Reflection API) в php — мощный инструмент для самоанализа кода. Давно не писал ничего интересного, а тут такая интересная мини-задачка — написать маленькую систему бизнес-правил aka BRMSдля обработки сложных форм, причём не просто десять табов который сохраняются в БД, а анализ который приводит к каким-то выводам. В качестве ядерного решения  выступает […]

PHP frameworks

Как можно уже заметить в моём блоге, я уделяю дотошное внимание используемому языку и смыслу слов, поэтому термин фреймворк мне не нравится, вместо этого по-моему правильней говорить о каркасе или скелете приложения. Выбор современных каркасов для php достаточно широк. Меня всегда интересовала именно внутренняя структура запуска типичного приложения, поэтому постараюсь описать их именно с […]

Стильная почта с картинками на PEAR

PEAR — вполне неплохая php-библиотека, хоть и достаточно тяжёлая. Определённо и в других библиотеках имеются классы работающие с рассылкой почты. А рассылка почты системой должна как правило отличатся от обычной mail() функции. Более того, модули рассылок почты зарегистрированным пользователям обычно самые сложные. И вопрос не столько в том что я […]

Простейший backdoor на php

Backdoor — тайный ход, лазейка. Разумное человечество использовало всегда запасной случай что-бы не попасть впросак. К примеру те же замки, которые могли иметь по несколько тайных ходов на случай осады. В том же Гарри Поттере это придаёт много интриги сюжету, а вместе с ним и больше свободы, силы и возможностей […]

CSV — кодировки, импорт и экспорт

Comma Separated Values — типичный способ экспорта табличных данных, но далеко не стандартный в плане совместимости между Excel, php и другими источниками данных. Надо читать RFC, и пробовать всё на практике Самое наглядное — если вы думали что данные достаточно через запятую перечислить, то если вы сохраните простой текстовый файл с […]

Сортировка матрицы на PHP

Сортировку можно производить на стороне сервера в БД (самое логичное решение), но зачастую система не продумана заранее настолько и получается что данные приходится выдирать из разных таблиц, между которыми нет очевидных связей. Поэтому сортировать приходится через серверные технологии или даже через javascript на стороне клиента.. Средствами PHP насколько мне известно […]

Профилирование PHP проектов

Профилирование это анализ потребления ресурсов при работе программы. Этимология слова видимо связана с тем что профиль это некая граница, отсюда — поиск границ компонентов ПО в ресурсном пространстве. В моём случае программа это исполняемые php-скрипты, а ресурсы это время, память и нагрузка на процессор. Время исполнения не всегда связано с нагрузкой процессора. […]

Как в docker-compose exec разово задать переменную окружения

Тоже достаточно повседневная задача — выполнить какую-либо команду в bash разово задав переменную окружения меняющую поведение данной команды. Например, в командной строке это может выглядеть так: SYMFONY_ENV=prod composer install —no-dev Однако, если выполнить это через docker-compose exec docker-compose exec -u app php SYMFONY_ENV=prod composer install —no-dev возникнет ошибка: