PHP8 + XDebug

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Дерик на днях выложил Beta-версию Xdebug 3 для PHP 8, а в PHP8, как все знают, вышел первый RC. Это значит, можно начинать портировать и дебажить. В принципе, для 8ки есть все основные расширения, кроме image magic - эти ребята традиционно в заднице выпустят совместимую версию позже.

Нельзя просто взять и собрать новую версию PHP, так уж заведено. Никита выпилил Pecl нахрен только за то, что он шел вместе с pear, и официально вместо него нет ничего. На место pecl претендует поделка по имени pickle, автор которой внезапно осознал, что просто поставить xdebug неа 8ку он не умеет. Ну и хрен с тобой, золотая рыбка - сам тикет открыл, сам допишешь. Все-равно никто кроме меня php ручками не собирает, просто запускают в докере.

А для докера есть героический проект docker-php-extension-installer. Я его сегодня нашел. Наверное, аффтору было очень скучно на карантине, и он ручками прописал в shell-скрипте команды сборки всех популярных расширений для нескольких версий php под несколько версий Alpine и Debian - откуда брать, какие зависимости ставить, с какими опции компилировать. Over 1500 строк на posix sh + тесты на github actions. Я бы застрелился.

Если кому интересно собрать свой образ для 8ки с расширениями - вот мой Dockerfile https://github.com/grikdotnet/phpdocker/tree/master/8.0
А кому влом, можно просто прописать в docker-compose.yml мой образ из docker hub
YAML:
version: "3.8"

services:
  application:
    image: grigori/phpextensions:8.0-fpm
  volumes:
    - fpm-socket:/fpm-socket/
    - ./php.ini:/usr/local/etc/php/php.ini
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Лично я забил собирать зоопарк руками году так в 2014м, если память не изменяет...
 

флоппик

promotor fidei
Команда форума
Партнер клуба
После того как я и некоторые мои знакомые попробовали образа на базе альпайна в проде, я не советую их никому больше делать - разница в производительности у glibc против musl - 15-20% (обычно страдают memcpy и malloc) можно было бы оставить для каких-то кронов, но образы с общими слоями в итоге занимают столько же места, как и выигрыш от альпайн образов.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Не, ну у нас в клубе же любят писать что производительность это самое последнее дело, главное код и деплой по феншую :)))
Я сам такой точки зрения придерживаюсь, что 5-7% производительности обычно потерять не жалко в угоду удобству. Но тут просто 15-20%, да еще и безо всякой выгоды - чуть меньше образа, и все.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, в скриптовых языках malloc/memcpy - основное узкое место

@флоппик действительно, 20% не стоит 300 мегабайт на диске, а как измеряли?
время обработки каждого запроса увеличивается на 20%?
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
судя по быстро нагугленной сравнительной таблице, в которой написано, что она составленна автором musl, так оно и есть
strlen 0.081 / 0.048
strchr 0.142 / 0.028
Big allocation & free 0.027 / 0.016
это основные для нас операции
в musl неплохо с мьютексами и utf8, но нам оно ни к чему
а вот memcpy - это ядро, libc тут ни при чем

спасибо, пошел переделывать свои образы на более классический дистрибутив
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Ух, надо ноду и golang замерить. Как раз сейчас с ручных виртуалок под убунтой на k8s-кластер переходим, по привычке собрали все в alpine, может, не стоит.
 

флоппик

promotor fidei
Команда форума
Партнер клуба

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, сырая совсем тулза, на поддержку alpha/beta-версий там один тикет, и про то, что валится на версиях не по composer-стандарту, как в xdebug, другой тикет

бери docker-php-extension-installer
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ух, надо ноду и golang замерить. Как раз сейчас с ручных виртуалок под убунтой на k8s-кластер переходим, по привычке собрали все в alpine, может, не стоит.
на ноде будет то же самое, а с golang должно быть пофиг - нет танцев со сложными структурами для динамической типизации, и бинарники собираются независимыми от libc
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
чет я этот финт не понял
поглядел твой dockerfile так и не понял где easy? а еще, оно может и принято писать все в куче под одним RUN дабы количество образов уменьшить, но выглядит не очень. у себя на extension по одной RUN пишу, легко включать выключать, видны зависимости
и этой проблемы нет когда комменты клево, warning не очень
Код:
  .... zip \
# build standard extensions with options  <<< warning
    && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
easy в том, что пишешь имя образа, и оно просто работает

>на extension по одной RUN пишу, легко включать выключать
расширения включаются и отключаются скриптами docker-php-ext-enable/disable, которые идут в официальных образах php, они отключают загрузку в php.ini,
собирать разные образы ради отключения одного расширения бессмысленно

зависимости чего от чего ты видишь? каждое расширение имеет в зависимостях конкретную системную либу: у редиса - редис, у мемкеша - мемкеш, на что там вообще смотреть-то? :)

фразу "комменты клево, warning не очень" я не могу понять вообще, строка комментария в sh-скрипте игнорируется, никакого warning там нет
 

WMix

герр M:)ller
Партнер клуба
у редиса - редис, у мемкеша - мемкеш, на что там вообще смотреть-то?
с редисом это curl на phpredis распаковка... и уже в конце docker-php-ext-install redis
для gd это libjpeg libpng..
для zip это zlib-dev и тд
расширения включаются и отключаются скриптами docker-php-ext-enable/disable, которые идут в официальных образах php, они отключают загрузку в php.ini,
есть конкретная аппликация, с конкретными зависимостями. ты же не лепишь везде xdebug
фразу "комменты клево, warning не очень" я не могу понять вообще, строка комментария в sh-скрипте игнорируется, никакого warning там нет
ну да, я знаю, все равно.. но и warning вроде был
 

WMix

герр M:)ller
Партнер клуба
ну да, просто run'ы закомментил раскомментил и все
 
Сверху