Фото: Noriko YAMAMOTO.

Подборка свежих новостей и материалов из мира PHP.

Для PHP 8.2 предложили добавить тип null; опубликована уязвимость в PHP с disable_functions, которая на самом деле не уязвимость; новый сайт от сообщества — phpopendocs.com; PHP 8.1 RC 3, Xdebug 3.1 и другие релизы.

Также в выпуске порция инструментов, полезные статьи, видео.

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

Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск, плюсаните пост, пожалуйста.

Новости


  • PHP 8.1.0 RC 3


    Очередной релиз-кандидат доставлен по расписанию. Что нового будет в PHP 8.1 можно посмотреть в постах What's new in PHP 8.1 и PHP 8.1: before and after и на PHP.Watch.

    Свежий пост от Brent Roose про использование оператора new для дефолтных значений параметров: PHP 8.1: new in initializers.

  • «Уязвимость» в PHP для обхода disable_functions


    Исследователь опубликовал метод обхода ограничений, заданных при помощи директивы disable_functions в php.ini.

    С помощью disable_functions можно запретить использование в PHP-скриптах функции, например, можно запретить system, exec, proc_open и shell_exec для блокирования вызова внешних программ.
    // eval(), кстати, не получится запретить.

    Уязвимостью эту проблему назвать нельзя, потому что disable_functions — это не секьюрити фича и полагаться на нее ради безопасности — плохая идея.

    Напишите в комментариях, используете ли вы disable_functions?

    Цитата Никиты Попова на Reddit:
    Является ли что-то проблемой безопасности, зависит от вашей модели угрозы. Что касается проекта PHP, то наша модель угрозы — это удаленный злоумышленник. Мы считаем секьюрити проблемой случай, когда злоумышленник имеет возможность выполнить произвольный PHP-код на сервере (RCE).

    Подробнее о том, что в PHP считается проблемой безопасности, а что нет: wiki.php.net/security.

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

    В тему разбор реальной RCE-уязвимости в fiveai/Cachet, популярном проекте на Laravel: Code Execution via Laravel Configuration Injection.

  • composer/composer 2.1.9


    В обновлении исправлена уязвимость на Windows (CVE-2021-41116). Пользователям Windows обязательно стоит обновиться.
  • PHPOpenDocs.com


    Экспериментальный сайт для полуофициального контента по PHP.

    Из полезного уже есть, страница для спонсорства со списком контрибьюторов сгруппированных по версиям PHP. А также раздел Internals с кучей ссылок про устройство кода PHP и как начать контрибьютить.

  • PHP Russia 2022


    Уже известны даты для конференции — 6-7 июня. Начали подготовку и прием заявок на доклады!



PHP Internals


  • [RFC] Allow null as standalone type


    Предлагается добавить возможность использовать null в декларациях типов.

    Во-первых, это недостающий кусок для полноты системы типов в PHP — есть mixed, добавили never, объединения и пересечения, не хватает юнит-типа.

    Во-вторых, такой тип позволит покрыть некоторые граничные случаи и улучшить статический анализ.

    Например, в объединениях можно использовать псевдотип false, но нельзя указать, что функция возвращает false|null, только bool|null.

  • [RFC] Deprecate partially supported callables


    Этот RFC уже на голосовании и, судя по всему, пройдет в PHP 8.2. Подробнее про предложение читайте в PHP-Дайджесте № 211.


Инструменты


  • Xdebug 3.1.0 — Обновился популярный отладчик для PHP. Добавлена поддержка PHP 8.1, много фиксов и несколько узкоспецифических фич.
  • php-runtime/runtime — Компонент Runtime отделяет логику загрузки приложения от глобального состояния, и таким образом позволяет запускать приложение в любых окружениях без изменений, например, на PHP-FPM, ReactPHP, Swoole и т.д.
    Изначально это был компонент для Symfony, но получился настолько хорош, что авторы выделили его в отдельную организацию на Гитхабе.
  • rindow/rindow-neuralnetworks — Фреймворк для обучения нейронных сетей по мотивам Python Keras. Согласно документации поддержка GPU пока доступна в экспериментальном режиме и только под Windows.
  • nunomaduro/termwind — Библиотека для форматирования вывода консольных программ с синтаксисом в стиле Tailwind CSS. PHP 8+
  • termage/termage — Еще одна похожая библиотека для форматирования вывода в консоль.
  • piko-framework/router — PHP-разработчики никогда не писали роутеры /s и вот один на базе сжатого префиксного дерева. Если верить бенчмаркам, то быстрее роутера Symfony.
  • unitpay/shamir — Реализация схемы разделения секрета Шамира (Shamir's Secret Sharing). Прислал AlexGx.
  • icanhazstring/random-issue-picker — Если хотите поучаствовать в Hacktoberfest, но не знаете с чего начать, то вот инструмент, который выберет случайную issue на гитхабе или гитлабе.


Symfony




Laravel




Статьи




Аудио/Видео





Подписывайтесь на Telegram-канал PHP Digest.

Этот дайджест подготовлен совместно с Insolita. Если понравился выпуск дайджеста, плюсаните пост, пожалуйста.

Кстати, Юля опубликовала заметку про выборку дней рождения в Postgres.


Заметили ошибку или опечатку? Сообщите в личку хабра или телеграм.

Прислать ссылку можно через форму или просто написав мне в телеграм.
Поиск ссылок по всем дайджестам
Предыдущий выпуск: PHP-Дайджест № 212

Комментарии (12)


  1. SerafimArts
    11.10.2021 15:02
    +10

    Что-то подобное показывал SerafimArts на своих стримах про PHP + Vulcan.

    Стримы — это в основном болтология. Не советовал кому-либо тратить время на просмотр их записей. Тем более они на середине обрываются (всего 2 серии), т.к. покопавишь в VK — понял, что эта штука требует дофига опыта, которого у меня просто нет, так что не могу гарантировать качество материала. В качестве альтернативы могу предложить более сжатый и щадащий вариант с введением в OpenGL на PHP: https://www.youtube.com/watch?v=1ZO1wR4rCCQ


    Если же мы говорим про демку от Искандера, то она использует SDL. Если кратко, то это набор из функций-утилит для работы с окнами, событиями и 2d примитивами, которая в значительной степени облегчает работу с графикой и не требует глубоких познаний устройств видеокарты. Так что для знакомства с этим миром я бы рекомендовал начать именно с неё (с библиотеки SDL), а не лезть сразу в дебри из OpenGL и уж тем более (тьфу-тьфу) Vulkan.


  1. stalkerxxl
    11.10.2021 15:25
    +9

    Остановитесь! Я не успеваю учить =)


    1. DmitryKoterov
      12.10.2021 07:57

      Что там учить-то, уже 5-10 лет назад все выучили в разных других языках. Я бы сказал, что PHP даже запаздывает с сахаром (где async-await? или ставка на файберы? - что, в принципе, интересный ход).


      1. p4s5w0r9
        12.10.2021 08:12

        где async-await? или ставка на файберы?

        Ставка на файберы.


        1. Yser
          12.10.2021 12:04

          Но выпало, как всегда, зеро.


        1. pronskiy Автор
          12.10.2021 12:17
          +1

          Так одно другому не мешает. В смысле, это разные вещи. Файберы — это просто небольшое улучшение корутин.

          А для async/await нужен асинхронный движок. В чем проблема делать сейчас на Amp/Swoole?


          1. Gemorroj
            12.10.2021 16:07

            Проблема в том, что как правило уже есть проект не на Amp/Swoole, но хочется внедрить для некоторых операций параллельщину. И вот тут начинаются проблемы с сериализацией. Т.к. огромное кол-во кода просто нельзя пропустить через тот же amphp/parallel, т.к. он не сериализуем (doctrine, symfony/http-client, ...).


            1. pronskiy Автор
              12.10.2021 16:53
              +5

              Что-то все в кучу. Давайте разбираться.

              асинхронность != параллельность

              >хочется внедрить для некоторых операций параллельщину

              Можно какой-нибудь конкретный пример из жизни? Попробуем разобраться.

              Синхронность/одноточность PHP — преимущество, которое очень упрощает код и отладку.

              Вот допустим смержат https://github.com/swow/swow в ядро PHP. Что изменится для вашего проекта "не на Amp/Swoole"?

              Также, symfony/http-client — вполне поддерживает асинхронность https://symfony.com/doc/current/http_client.html#http-client-streaming-responses И вообще делать непблокирующие HTTP-вызовы — тривиальная задача, которую умели делать еще со времен curl multi.


              1. Gemorroj
                14.10.2021 10:01

                подробнее, например, тут https://github.com/amphp/ext-fiber/issues/9

                пример неработающей связки amp и symfony/http-client - https://github.com/Gemorroj/parallel-nonserializable


      1. SerafimArts
        12.10.2021 15:53
        +4

        где async-await?

        Блин, пхпшники уже совсем разленились (ирония)


        function await(\Generator $coroutine): mixed
        {
            while ($coroutine->valid()) {
                $current = $coroutine->current();
        
                if ($current instanceof \Generator) {
                    $current = await($current);
                }
        
                $coroutine->send($current);
            }
        
            return $coroutine->getReturn();
        }

        Для файберов примерно тоже самое будет, только ещё шаг со start добавится.


        Так что всё что надо — это определиться с тем что именно будет считаться "единицей авейта". В питоне, например, это корутинки и есть.


  1. caballero
    12.10.2021 01:11
    -1

    А циклический сдвиг вправо >>> собираются добавить когда нибудь?

    По моему PHP единственный из распространенных языков где его нет


    1. pronskiy Автор
      12.10.2021 12:08
      +2

      А разве есть такой оператор в Python, Ruby, Golang, C#, например?