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

PHP *

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

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

Аспектно-ориентированное программирование на PHP

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

Закончили в этом месяце первый набор курса «Backend разработчик на PHP» и трудоустраиваем их вовсю (ну насколько это возможно в пору отпусков). Курс пополнился ещё одним преподавателем — Евгением Волосатовым, которого многие, наверное, знают. Ну, а мы традиционно делимся интересными вещами.

Поехали.

В любом приложении есть части кода, “пересекающие” несколько частей архитектуры одновременно.

Эта проблема не так очевидна при работе с полнофункциональным фреймворком. Скорее всего ваша проблема окажется распространенной, и будет шанс, что фреймворк уже разрешил ее, пожертвовав разделением ответственности или предоставив абстракцию поверх фреймворка. Многие фреймворки используют событийно-ориентированную архитектуру для решения проблем сквозной функциональности. Но всегда наступает момент, когда фреймворк не способен предоставить нужный уровень контроля над конкретным фрагментом логики. Это особенно актуально при использовании микрофреймворков или разработке со специализированными библиотеками. Чем больше ваше приложение учитывает принципы разделения ответственности, тем больше будет роль сквозной функциональности в вашей архитектуре.

Читать дальше →

Сравнение сортировок обменами

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


Сферические алгоритмы в вакууме — это прекрасно. Однако давайте спустимся с небес на грешную землю и посмотрим как вся эта теоретическая красота покажет себя на практике.
Сравнение сортировок обменами

Расширение PHP и Kotlin Native. Часть первая, наивная

Время на прочтение5 мин
Количество просмотров5.9K
В этой статье рассматривается самый наивный и простой подход к созданию расширения PHP с использованием Kotlin Native. Обращаю внимание, что не на, а с использованием.

Это скорее некий туториал с описанием возникших при скрещивании ужа с ежом проблем и путей их решения. Откровений не будет, но возможно кому-то и пригодится.

Итак, если интересно, то добро пожаловать под кат.
Читать дальше →

Отправка почты из Docker-контейнера (докеризация postfix и sasl)

Время на прочтение6 мин
Количество просмотров29K
Когда я расположил приложение в Docker-контейнере и попробовал отправить email на почтовый сервер в другом Docker-контейнере, столкнулся с непредвиденной проблемой. Почтовый сервер postfix по умолчанию отправляет почту на произвольный домен получателя только от локального клиента. Все остальные домены нужно прописывать в параметре relay_domains, и если параметр mynetwors настроен правильно, то почта будет отправляться на перечисленные в параметре relay_domains домены с клиента из mynetwors.

В принципе, мне этого было достаточно, т.к. приложение теоретически должно было отправлять почту на ровно один корпоративный почтовый сервер. Но такое решение меня не очень устраивало, потому что задача может поменяться в любой момент. Поэтому, я попытался настроить sasl-авторизацию, которая позволяет отправлять почту авторизованным пользователям на произвольный домен.
Читать дальше →

Парсинг постов из telegram каналов на PHP

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров91K
Привет, Хабр!

Несколько лет назад я начал разрабатывать свой агрегатор контента, что бы упростить свой серфинг в сети. Изначально я парсил только rss, vk и facebook, но в прошлом году решил сделать полный рефакторинг проекта: отказаться от парсинга на клиенте, сделать нормальный back-end, использовать базу данных для хранения данных и расширить список поддерживаемых ресурсов.

Помимо стандартного набора из rss, fb, vk, twitter, instagram, youtube я добавил поддержку произвольных открытых каналов из telegram.

image

Под катом пошаговая инструкция, как парсить любые каналы в telegram без регистрации и смс.

[UPDATE 2019-03-12]
Мой новый пост про парсинг телеграм каналов: habr.com/ru/post/354000. Более качественный код, микросервисы с открытым исходным кодом и новый публичный сервер для тестов.
[UPDATE 2023-10-08]
Важное напоминание: Телеграмм не разрешает парсить аудиторию каналов. Используя серверный клиент можно получить только те данные, которые видны в обычном, оффициальном приложении.
Читать дальше →

Раздача видео. Засада: nginx или php?

Время на прочтение3 мин
Количество просмотров14K
Хочу поделиться своим маленьким опытом в реализации раздачи видео-контента.

Итак


Есть сервис, раздает видео-контент для просмотра (т.е. именно скачивание не предусматривается).
Читать дальше →

Как изменилась платформа для интернет-магазина ReadyScript за последние 3 года

Время на прочтение7 мин
Количество просмотров3.5K
Привет, Хабр! Мы не заметили, как пролетели 3 с лишним года со дня предыдущей публикации, так как увлеченно развивали возможности нашей eCommerce платформы и сопутствующих сервисов. В этой статье мы расскажем, что ReadyScript предлагает сегодня пользователям и разработчикам, какие задачи с его помощью можно решить.

За это время наш продукт вырос до третьей мажорной версии, обзавелся адаптивной административной панелью, интеграцией с онлайн кассами, мобильными приложениями для курьеров и администраторов, мобильными приложениями для клиентов, Desktop приложениями для Windows и OSx, фреймворком для простого создания внешних API, маркетплейсом с множеством модулей, а также целой экосистемой для работы с пользователями и разработчиками.



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

Подробнее обо всем этом мы расскажем под катом.
Читать дальше →

Magento Dare to Share — Открытая Площадка для докладов о Magento, PHP и eCommerce

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


20 Июля в Киевском офисе Magento прошло открытое мероприятие под названием Magento meetup «Dare to Share», которое могли посетить и в котором могли принять участие любые желающие кому интересна платформа Magento 2 и тема электронной коммерции (eCommerce).

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

  1. Игорь Миняйло, Magento (@iminyaylo on ) — Magento Community Engineering
  2. Макс Пронько, The Irish Store (@max_pronko on ) — Автоматизация релизов для Magento 2. Опыт компании The Irish Store
  3. Вячеслав Кравчук, Atwix (@slkra on ) — Story of a Transformation (Укр.)
  4. Андрей Кравец, Forbytes / Gymgrossisten (@Winfle on ) — Dynamic caching of personalised data in Real Life (Укр.)
  5. Александр Козырь, Magecom (@kozyr1av on ) — SOLID-ное программирование на Magento 2

Тезисы докладов можно прочитать под Катом
Читать дальше →

Решение проблем организации бизнес-логики в PHP или как пойти своим путем

Время на прочтение12 мин
Количество просмотров17K
image Привет, Хабр! Не первый раз я пытаюсь написать эту статью, но давно уже есть желание поделиться опытом и люди просят.

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

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

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

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

PrestaShop. О глюке в многоуровневой навигации

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

Привет Хабр! Я понимаю, что история, о которой я хочу рассказать совсем обычная. У каждого программиста, работающего с Open Source, таких случаев до десяти на дню. Но я все равно решил о ней написать. Кому-то она реально поможет, а кому-то может просто улучшит настроение, что тоже неплохо.

Будет немного реверс-инжиниринга, немного философских размышлений, и конечно счастливый конец. Кому важно только исправление глюка – можете не читать весь этот бред и сразу скопировать хак из конца статьи. В любом случае, добро пожаловать под кат.
Читать дальше →

Блокировка дубликатов Symfony Сommand

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

Сегодня хочу предложить вашему вниманию частный случай для решения «неудобств», связанных с периодичным запуском процессов в том случае, если предыдущий еще не завершился. Иначе говоря — блокировка запущенных процессов в symfony/console. Но все было бы слишком банально, если бы не необходимость блокировки среди группы серверов, а не на отдельно взятом.

Дано: Один и тот же процесс, который запускается на N серверов.
Задача: Сделать так, чтобы в единицу времени был запущен только один.
Читать дальше →

Марсоход, Координаты посадки

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


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


  • Monolithic Repositories — MonoRepo (Монолитные репозитории)
  • Command/Query Responsibility Segregation — CQRS (Сегрегация ответственности на чтение и запись)
  • Event Sourcing — ES (События как источник)
  • Test Driven Development — TDD (Разработка через тестирование)

Оглавление

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


Марсоход должен будет сначала приземлиться в заданном положении. Положение состоит из координат (X и Y, являющихся целыми числами) и ориентации (строковое значение north, east, west или south).

Сегодня мы будем рефакторить LandRover:

Читать дальше →

Консольные команды с PHPixie Console

Время на прочтение5 мин
Количество просмотров4.9K
image PHPixie Console — это новый компонент позволяющий создавать, роутить и запускать консольные команды. Как и другие библиотеки фреймворка он может легко использоваться без самой PHPixie как более простая альтернатива аналогичной библиотеки из Symfony. В первую очередь это статься рассчитана на тех кто уже пользуется PHPixie и в ней будет короткое описание стандартных команд фреймворка, но в конце я так же приведу пример того как запустить PHPixie Console в отдельности.
Читать дальше →

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

YML (Yandex Market Language) — Генерация файла товаров для Яндекс Вебмастер

Время на прочтение2 мин
Количество просмотров41K
Недавно я заметил что в Yandex Webmaster появился новый есть раздел, он называется «Товары и цены». Там я увидел как можно бесплатно улучшить в выдаче яндекса, страницы товаров магазина.

yandex

Так как я разрабатываю сейчас интернет магазин, такая возможность показалось очень заманчивой.
Читать дальше →

Приключения ножниц в цифровом мире (пара строк о DevelStudio)

Время на прочтение2 мин
Количество просмотров3.9K
Эта заметка будет совсем коротенькой, даже короче, чем лирическое отступление к ней. Вы, наверное, видели фильм Акиры Куросавы — «Еще Нет»?! Японцы ведь действительно знают толк во всем, что касается краткости и точности. Вот это ёмкое «еще нет» вертелось в моей голове с той поры, когда я услышал и переварил десяток не самых лестных комментариев о среде разработки DevelStudio 2012…

О фреймворках

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

Роман Ивлиев


В сегодняшней статье поговорим о неотъемлемой составляющей большого числа современных веб-проектов — о фреймворках.


Роман Ивлиев на примере множества проектов портала banki.ru, а также заказной разработки в студии крупных проектов Онтико. Рассмотрим следующие темы и поищем ответы на вопросы:


  1. Что такое фреймворк, и зачем их пишут.
  2. Почему для некоторых языков их десятки, а для некоторых — единицы.
  3. В чём плюсы и минусы применения.
  4. Наиболее распространённые мифы.
  5. Использовать или нет — примеры из жизни.
  6. Как выбрать из множества доступных вариантов, на что стоит обратить внимание.
Читать дальше →

Как начать разработку крупного, нетипичного проекта. Практическое пособие

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

image


Выбор платформы для бекенда

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


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

Читать дальше →

Отладка php функций с помощью phpdbg, как альтернатива Xdebug через IDE

Время на прочтение2 мин
Количество просмотров15K
Иногда приходится работать с сервером через «кучу» файерволов, c локальным IP c репозиторием и т.д., и по этой причине довольно тяжело настроить XDebug для работы через IDE NetBeans (и прочих IDE). Приходится проще поднимать локально виртуальную машину. И если XDebug нужен лишь только для того, чтобы по быстрому ознакомиться с большим новым проектом (с кучей легаси кода) с последующей отладкой через error_log, то отлаживать отдельные скрипты довольно не всегда удобно в нем.
Читать дальше →

REST API на Symfony, FOSRestBundle + GlavwebDatagridBundle

Время на прочтение7 мин
Количество просмотров12K
Всем привет! В прошлой статье я рассказал о нашем опыте в REST API со сборкой на FOSRestBundle + JMSSerializer. Сегодня я поделюсь нашим подходом к разработке REST API на FOSRestBundle + GlavwebDatagridBundle.
Читать дальше →