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

PHP *

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

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

Представляем PHP 7.4: Производительность, Возможности, Устаревший Функционал

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

PHP постоянно развивается, и только что мир увидело их последнее обновление — PHP 7.4. Производительность и скорость продолжают расти, в чём мы убедились ещё в предыдущих релизах PHP 7. Предварительная загрузка — одно из самых ярких обновлений. Эта возможность позволяет значительно ускорить выполнение скрипта и делает код чище и быстрее благодаря уменьшённому количеству строк кода.


PHP является важным элементом всемирной паутины и используется более чем на 79% всех сайтов. Известные сайты, такие как Facebook, Википедия, WordPress и многие другие используют PHP.

Мы можем увидеть что скорость веб-сайтов WordPress увеличивается вдвое, если сравним сайты, работающие на PHP 5 и 7. От последней версии больше всего выиграют сайты на WordPress.

Читать дальше →
Всего голосов 21: ↑12 и ↓9+3
Комментарии22

Что делать с легаси. Материалы с Badoo PHP Meetup #4

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

15 февраля в офисе Badoo прошла очередная встреча PHP-разработчиков, посвященная теме легаси. Целый день мы слушали рассказы об опыте крупных компаний, общались и делились болью.

Получилось рассмотреть проблему с нескольких сторон:

  • организация процессов разработки по избавлению от легаси;
  • тактика распила легаси-монолита на микросервисы;
  • способы организации API, которые позволяют держать под контролем рост устаревшего кода;
  • автоматические способы обнаружения «мёртвого» кода;
  • а еще попробовали поговорить как рефакторить легаси-код с помощью DDD подходов;

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


Всего голосов 32: ↑32 и ↓0+32
Комментарии3

Использование RabbitMQ вместе с MonsterMQ часть 1

Время на прочтение4 мин
Количество просмотров4.3K
Эта статья рассчитана на тех, кто ещё не знаком с очередями и RabbitMQ. Тем, кто уже знает как работать с RabbitMQ и хочет только изучить возможности, которые предоставляет MonsterMQ, я рекомендую посетить страницу проекта на github.com, где в описании подробно описано как можно использовать MonsterMQ без описания основ работы с RabbitMQ. Далее в этой статье будут рассмотрены основы работы RabbitMQ вместе с MonsterMQ.
Читать дальше →
Всего голосов 10: ↑8 и ↓2+6
Комментарии3

Как организовать скины в Symfony

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

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


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

Читать дальше →
Всего голосов 3: ↑3 и ↓0+3
Комментарии3

Истории

Оффер в Лондон за один день: как его получить и чем заняться после переезда

Время на прочтение13 мин
Количество просмотров55K
Привет, Хабр!

На 2020 год у нас большие планы. Мы намерены активно развивать Badoo и Bumble, поэтому серьёзно расширяем техническую команду. И сегодня мы объявляем о масштабном найме PHP-разработчиков в наш лондонский офис. 

В 2017 году мы попробовали новый формат поиска — hiring event: привозим в Москву крутых разработчиков, за один день проводим собеседования и сразу же делаем оффер подходящим кандидатам. Все расходы на поездку в столицу, разумеется, берём на себя.

Формат хорошо себя зарекомендовал, и у нас снова открыто много позиций, поэтому мы объявляем новый PHP Hiring Event. 

Правила те же: покажи высокий результат в тесте до 1 марта, успешно пройди интервью 21 или 22 марта в Москве — и в тот же день получи оффер в лондонский офис Badoo. 

UPD: тест завершён, спасибо всем участникам! Мы уже известили финалистов и предупредили о том, что даты собеседования переносим на неопределенный срок ради комфорта и безопасности кандидатов.

UPD2: Несмотря на коронавирус, нам удалось провести интервью с участниками и пригласить четырех человек к нам в команду. Большое спасибо всем, кто прошел тест и участвовал в интервью! Этот hiring event не последний: следите за нашим блогом и вакансиями на нашем сайте.



Под катом я расскажу:

  • подробнее про тест;
  • какими проектами мы занимаемся: оптимизация фотографий, видеостриминг, machine learning для писем, переход на новые версии PHP и многое другое.

Если ты PHP-шник и хочешь переехать в Лондон, добро пожаловать под кат!

Читать дальше →
Всего голосов 73: ↑65 и ↓8+57
Комментарии280

Aсинхронный PHP

Время на прочтение14 мин
Количество просмотров47K
Десять лет назад у нас был классический LAMP-стек: Linux, Apache, MySQL, и PHP, который работал в медленном режиме mod_php. Мир менялся, а с ним и важность скорости. Появился PHP-FPM, который позволил значительно увеличить производительность решений на PHP, а не срочно переписывать на чем-то побыстрее.

Параллельно велась разработка библиотеки ReactPHP с применением концепции Event Loop для обработки сигналов от ОС и представления результатов для асинхронных операций. Развитие идеи ReactPHP — AMPHP. Эта библиотека использует тот же Event Loop, но поддерживает корутины, в отличие от ReactPHP. Они позволяют писать асинхронный код, который выглядит как синхронный. Возможно, это самый актуальный фреймворк для разработки асинхронных приложений на PHP.



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

Об этом и поговорит Антон Шабовта (zloyusr) — разработчик в компании Onliner. Опыт больше 10 лет: начинал с десктопных приложений на С/С++, а потом перешел в веб-разработку на PHP. «Домашние» проекты пишет на C# и Python 3, а в PHP экспериментирует с DDD, CQRS, Event Sourcing, Async Multitasking.
Всего голосов 60: ↑60 и ↓0+60
Комментарии104

PHP-Дайджест № 173 (27 января – 10 февраля 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 9 и другие релизы, 3 свежих RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое.

Приятного чтения!


Читать дальше →
Всего голосов 54: ↑54 и ↓0+54
Комментарии14

Железо или оптимизация? Badoo, Авито и Мамба — о производительности PHP

Время на прочтение18 мин
Количество просмотров14K
Вопрос производительности PHP-кода для Badoo один из самых важных. От качества PHP-бэкенда напрямую зависят количество ресурсов, которые мы тратим на разработку и эксплуатацию, скорость работы сервиса и впечатление, которое он производит на пользователей.

Поэтому темой третьей встречи сообщества PHP-разработчиков в нашем офисе мы сделали производительность бэкенда и пригласили к обсуждению коллег из Авито и «Мамбы».



Читайте под катом расшифровку дискуссии, в которой мне повезло быть модератором: как устроена инфраструктура трёх компаний, как мы измеряем производительность и на какие метрики ориентируемся, какие инструменты используем, как делаем выбор между железом и оптимизацией.

А 15 февраля приходите на следующий Badoo PHP Meetup: обсудим легаси.
Всего голосов 40: ↑40 и ↓0+40
Комментарии20

Эволюция обработки вебхуков Facebook: с нуля до 25 000 в секунду

Время на прочтение10 мин
Количество просмотров12K
Скорее всего, рассказывать, что такое вебхуки (webhooks) — никому не нужно. Но на всякий случай: вебхуки — это механизм оповещения о событиях во внешней системе. Например, о покупке в интернет-магазине через онлайн-кассу, отправке кода в GitHub-репозиторий или действиях пользователей в чатах. В типичном API нужно постоянно опрашивать сервер, написал ли пользователь что-нибудь в чате. С помощью механизма вебхуков можно «подписаться» на оповещения, и сервер сам отправит HTTP-запрос, когда произойдет событие. Это удобнее и быстрее, чем постоянно запрашивать новые данные на сервере.



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

Основная масса сообщений отправляется через Facebook Messenger. У него есть особенность — медленный API. Когда клиент пишет сообщение, чтобы заказать пиццу, Facebook отправляет в ManyChat вебхук. Платформа его обрабатывает, отправляет запрос обратно и пользователь получает сообщение. Из-за медленного API некоторые запросы идут несколько секунд. Но когда платформа долго не отвечает, бизнес теряет клиента, а Facebook может отключить приложение от вебхуков.

Поэтому обработка вебхуков — это одна из главных инженерных задач платформы. Чтобы решить проблему, в ManyChat за три года работы несколько раз меняли архитектуру обработки с простого контроллера в Yii до распределенной системы с «Галактиками». Подробнее об этом под катом расскажет Дмитрий Кушников (@cancellarius).
Читать дальше →
Всего голосов 37: ↑34 и ↓3+31
Комментарии12

PHP Code Style Conventions

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

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

Читать дальше →
Всего голосов 17: ↑7 и ↓10-3
Комментарии29

Instagram api на минималках

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

Все началось с того, что я захотел сделать канал в инстаграме потратив на поиски и тесты сервисов авто публикаций целый день, далее я решил посмотреть на готовые пакеты гитхаба я удивился на размер кода этих пакетов (некоторые фреймворки php меньше чем эти обертки над инстаграмом), я плюнул и решил написать свою обертку с минимальными возможностями.
Читать дальше →
Всего голосов 13: ↑10 и ↓3+7
Комментарии25

Разработка приложений опираясь на методологию The Twelve-Factor App с примерами на php и docker

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


Для начала немного теории. Что такое The Twelve-Factor App?


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

Документ сформирован разработчиками платформы Heroku.

Методология двенадцати факторов(The Twelve-Factor App) может быть применена для приложений, написанных на любом языке программирования и использующих любые комбинации сторонних служб (backing services) (базы данных, очереди сообщений, кэш-памяти, и т.д.).
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии7

Разворачиваем API с AWS Elastic Beanstalk

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


В конце января мы провели очередной онлайн-интенсив по курсу «Backend-разработчик на PHP». В этот раз темой открытого урока стало создание Telegram-бота для заказа кофе в заведении и оплаты онлайн. Вебинар получился очень насыщенным, поэтому растянулся на два дня: «День 1» и «День 2». Мы же предлагаем вашему вниманию текстовую версию первого дня онлайн-интенсива. Он был посвящён знакомству с AWS Elastic Beanstalk и разворачиванию API с его помощью.

Преподаватель — Михаил Каморин, Senior Backend Developer в Skyeng.
Читать дальше →
Всего голосов 9: ↑8 и ↓1+7
Комментарии1

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

15 февраля Badoo PHP Meetup #4. Легаси

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


Привет!

15 февраля, в субботу, приглашаем на очередную встречу сообщества PHP-разработчиков в офисе Badoo. 

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

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

Регистрация по ссылке, обязательная (важно: пишите свои данные кириллицей). Не забудьте дождаться подтверждения участия, оно придет дней за 10 до митапа. 

Первый доклад в 12:00. В программе пять докладов, практически не ограниченное свободное общение за кофе, викторина, розыгрыш билета на PHPRussia, а в качестве afterparty — очередная встреча сообщества BeerPHP Moscow
Читать дальше →
Всего голосов 46: ↑46 и ↓0+46
Комментарии2

Йошкар-Ола, вообще, айтишный город?

Время на прочтение4 мин
Количество просмотров6.5K
Именно таким вопросом мы задались, встретив ребят оттуда на казанском PHP-митапе. Оказалось, всего за месяц они смогли раскачать местное сообщество — небольшое расследование со ссылками на городские чаты, активности и каналы под катом.



А если вам точно не хватало развиртуализации, приходите 1 февраля на 2-й PHP-митап от местного чата.
Всего голосов 26: ↑26 и ↓0+26
Комментарии1

Работа с IPv6 в PHP

Время на прочтение6 мин
Количество просмотров7.8K
Недавно мы получили статус LIR и /29 блок IPv6. А следом возникла необходимость вести учёт назначенных подсетей. И коль скоро наш биллинг написан на PHP, пришлось немного проникнуться вопросом и осознать, что этот язык — не самый дружелюбный в плане работы с IPv6. Под катом — наше решение возникших задач по работе с адресами и диапазонами. Возможно, не самое элегантное, но поставленные задачи выполняет.

Читать дальше →
Всего голосов 24: ↑21 и ↓3+18
Комментарии11

PHP-Дайджест № 172 (14 – 27 января 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4.2 и другие релизы, Stringable RFC, обзор PHP 8, порция полезных инструментов, 4 ближайших митапа, видеозаписи с конференций, стримы и многое другое.

Приятного чтения!


Читать дальше →
Всего голосов 68: ↑68 и ↓0+68
Комментарии13

Бот в telegram, который следит за доменом

Время на прочтение4 мин
Количество просмотров16K
Привет жителям Хабра.

В процессе изучения PHP, пришла в голову мысль, для практики написать какого-нибудь бота на PHP, без использования фрэймворков.

Выбор пал на бота, который будет получать информацию о жизни домена (whois), затем доставать оттуда дату регистрации и добавлять этот домен в БД (mysql), с последующий привязкой к пользователю и уведомлением в telegram.

Исходный код в моем репозитории на гите.

Мне захотелось использовать MVC структуру, что оказалось на мой взгляд не совсем верным, так как view не был задействован и это уже нельзя назвать mvc, но да ладно…
Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии26

Концепция фильтрации моделей на примере Laravel

Время на прочтение4 мин
Количество просмотров23K
Хочу представить вашему вниманию концепцию организации фильтрации по URL-запросу. Для примера буду использовать язык PHP и фреймворк Laravel.

Концепция


Идея заключается в создании универсального класса QueryFilter для работы с фильтрами.

GET /posts?title=source&status=active

Использую данный пример, мы будем фильтровать посты (модель Post) по следующим критериям:

  • Наличие слова «source» в поле title;
  • Значение «publish» в поле status;
Читать дальше →
Всего голосов 7: ↑4 и ↓3+1
Комментарии6

Как выглядит zip-архив и что мы с этим можем сделать. Часть 4 — Чтение архива

Время на прочтение8 мин
Количество просмотров3.8K
Продолжение цикла о Zip-архивах и PHP. Предыдущие статьи: Часть 1, Часть 2, Часть 3

Доброго времени суток, дорогие читатели.
На этот раз я хотел бы представить, наверное, заключительную часть цикла о Zip-архивах и PHP.

В этой статье я покажу как прочесть уже существующий архив и для примера мы возьмем photos.zip из прошлой статьи. Чтоб не повторять все процедуры воспользуемся готовым — https://github.com/userqq/images/raw/master/photos.zip.

А теперь давайте на минутку отвлечемся и вспомним, из чего состоит наш архив: сначала идет набор данных упакованных файлов, где каждый упакованный файл предварён структурой Local File Header (LFH), после всех данных у нас идет набор структур Central Directory File Header (CDFH) — это такое оглавление по нашему архиву, в котором перечислены все элементы и позиции их смещения относительно начала файла. А завершает архив End Of Central Directory Record (EOCD) — тут указана позиция начала структур CDFH, их количество и общая длина в байтах. Поэтому архив следует читать с конца, чтоб сначала найти EOCD, потом прочесть структуры CDFH и таким образом получить список файлов в архиве.

FYI: А некоторые форматы, например JPEG, читаются с начала. Поэтому мы можем склеить картинку с архивом, даже банально через cat image.jpeg archive.zip > imagearchive.jpeg, не потеряв функционала. Браузеры и приложения для просмотра картинок будут без каких-либо проблем показывать нам картинку. В то время как любое приложение для чтения zip-архивов, будь то 7z или unzip, сможет преспокойно работать с файлом как с архивом. Например, вот — https://github.com/userqq/images/blob/master/jpegarchive.jpg (Осторожно, эта штука весит около 20мб, поэтому не советую открывать с телефонов или если вам дорог трафик). Таким образом, если вы знаете хостинг картинок, на котором изображения не перекодируются и не обрезаются, вы можете заливать туда не только картинки:) Хотя, мне кажется, сейчас таких уже не найти.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии4