PHP Дайджест № 196 (1 – 11 января 2021)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Свежая подборка со ссылками на новости и материалы. В выпуске: релиз PHP 8.0.1, MySQL движок на PHP от Vimeo и другие релизы, обновленный Enum и свежие предложения для PHP 8.1, «уязвимость» в Laminas, инструменты, статьи, видео, PHP Дайджест Live в 20:00 МСК.

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



Новости и релизы


  • PHP 8.0.1, 7.4.14, 7.3.26 — Во всех релизах исправлена уязвимость CVE-2020-7071 в функции url_parse() из-за неправильной фильтрации урлов вида http://php.net\@aliyun.com/aaa.do. В 8.0 и 7.4 еще дополнительно пачка исправленных багов.
  • habr Итоги года в PHP мире — Опрос сообщества Skyeng и PHP Digest.
  • Вся документация PHP наконец-то перенесена в Git: — github.com/php/doc-base!

PHP Internals


  • [RFC] Enumerations, Round 2 — Предложение по Enum для PHP было сильно доработано. В частности: кейсы (значения) не могут иметь методы или константы, а сам Enum может; поддерживаются трейты без свойств; в скалярных енамах вместо метода value() теперь просто свойство. Обзор предложения был в выпуске № 194 и на стриме.
  • [RFC] Bundling ext/simdjson into core — Автор предлагает забандлить в ядро PHP библиотеку simdjson. Оно в разы быстрее чем текущее ext/json и позволяет парсить гигабайтные json за секунды.

    В обсуждении указали на то, что библиотека молодая и не доступна во многих инсталяциях. Поэтому пока лучше предоставлять ее в виде PECL расширения, а забандлить позже.
  • [RFC] Array unpacking with string keys — В PHP 5.6 была добавлена распаковка массива в аргументах:
    variadic_function(...['apple', 'banana', 'lemon']);

    А в PHP 7.4 то же самое в массивах:
    $parts = ['apple', 'pear'];
    $fruits = ['banana', 'orange', ...$parts, 'watermelon'];
    // ['banana', 'orange', 'apple', 'pear', 'watermelon'];
    

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

    В PHP 8.1 предлагается разрешить распаковку массивов со строковыми ключами:
    $array1 = ['a' => 'apple', 'p' => 'pear'];
    $array2 = ['b' => 'banana', 'o' => 'orange'];
    $array = [...$array1, ...$array2];
    // Приблизительно то же самое что:
    $array = array_merge($array1, $array2);
    
  • [PR] Use 'ENT_QUOTES|ENT_SUBSTITUTE' for HTML encoding and decoding functions — Автор пул-реквеста заметил, что функция htmlspecialchars() почти всегда используется с флагами ENT_QUOTES и ENT_SUBSTITUTE:

    • ENT_QUOTES — WordPress
    • ENT_QUOTES — Blade (Laravel)
    • ENT_QUOTES | ENT_SUBSTITUTE — Twig (Symfony or Slim)
    • ENT_QUOTES | ENT_SUBSTITUTE — CodeIgniter
    • ENT_QUOTES | ENT_SUBSTITUTE — CakePHP
    • ENT_QUOTES | ENT_SUBSTITUTE — Yii
    Предлагается сделать эти флаги включенными по умолчанию.
  • check [RFC] Restrict $GLOBALS usage — Принято единогласно. Использование $GLOBALS начиная с PHP 8.1
    будет ограничено
    Продолжат работать чтение, запись, isset и unset:
    $GLOBALS['x'] = 1;
    
    echo $GLOBALS['x']
    
    isset($GLOBALS['x']);
    unset($GLOBALS['x']);

    А вот попытка изменить саму переменную $GLOBALS вызовет ошибку:
    $GLOBALS = [];
    $GLOBALS =& $x;
    $x =& $GLOBALS;
    unset($GLOBALS);

    Также ошибка будет, если передать $GLOBALS по ссылке в функцию:
    
    asort($GLOBALS);
    // > Compile-time error

    Все это упрощает внутренности PHP и улучшает производительность операций с массивами в PHP.

  • [RFC] Concepts to improve mysqli extension — Рекомендованным механизмом для доступа к БД в PHP является PDO. Тем не менее во многих приложениях используется mysqli. У последнего есть ряд старых проблем, которые автор и предлагает решить.
  • [RFC] Add array_is_list(array $array): bool — Стартовало голосование по добавлению функции, которая вернет true, если передать в нее массив с последовательными целочисленными ключами 0, 1, 2 ... count($value)-1. Функция переименована из is_list() в array_is_list(). О причинах было подробнее на стриме.

    В Symfony уже успели сделать полифил для PHP 8.1 с этой функцией.
  • В PHP 8.1 добавлены супербыстрые алгоритмы хеширования: xxHash и MurmurHash3.

Инструменты


  • dollar Dump Debugging Evolved — Ray — Ребятки из Spatie представили свое приложение для отладки — Ray. Добавляете вызовы ray($anything) в своем коде, и при запуске PHP-скрипта оно красиво отображается в отдельном десктопном приложении.

    Если вы осилили Xdebug, то вряд ли это имеет смысл. А если отлаживаете в стиле var_dump(...)/die(), то может быть интересно.

    Смотрите подробный video видеообзор на английском или на русском в ближайшем PHP Дайджест Live.
  • AdamGaskins/barcoder — Пакет с лаконичным интерфейсом для генерации SVG-картинок штрихкодов (QR, Datamatrix, и т.п.).
  • vimeo/php-mysql-engine — MySQL движок на чистом PHP. Пригодится, если вы при тестировании вы обращаетесь в базе и хотите ускорить запуск тестов, эмулируя MySQL в памяти. Библиотека расширяет класс PDO и позволяет вызывать обычные методы PDO MySQL. Аккуратно: есть ограничения.
  • jvoisin/snuffleupagus — PHP-расширение блокирует запуск потенциально небезопасного кода в рантайме и избавляет от многих потенциальных уязвимоcтей. Изначально разработан для хостеров, которые, естественно, не могут редактировать код своих клиентов, но хотят сделать его безопаснее.
  • mbunge/php-attributes — Пакет для автоматического резолва/инициализации атрибутов PHP 8. Можно просто подключить автозагрузчик или использовать резолвер вручную.
  • mlocati/docker-php-extension-installer — Инструмент упрощает установку PHP-расширений в Docker.
  • php-opencv/php-opencv — Расширение для компьютерного зрения (распознавание лиц, объектов, и т. п.) и машинного обучения теперь с поддержкой PHP 8. Примеры использования.

Symfony


  • 5 новых фишек, которые можно делать на Symfony 5.2 + PHP 8.0
  • How to create service bundles for a Symfony application
  • Неделя Symfony #732 (4-10 января 2021)
  • Итоги 2020 для Symfony

Laravel


  • Создаём REST API с помощью tailflow/laravel-orion.
  • habr Laravel–Дайджест (28 декабря 2020 – 10 января 2021)
  • lorisleiva/laravel-actions 2.0 — Минипакет предлагает организацию приложения в виде классов-экшнов.
  • video Подкаст Тейлора Laravel Snippet #26 — Jetstream 2.x, Forge Circles, Spark «Next», React SPAs.

Yii


  • habr Новости Yii 2020, выпуск 8
  • video E-commerce сайт на Yii 2 — Летсплей на 16 часов. Результат thecodeholic/yii2-ecommerce-website.

Zend / Laminas


  • Итоги 2020 для Laminas Project
  • В Zend Framework / Laminas зарепортили уязвимость — Суть «уязвимости» можно понять из этого примера:
    class MyClassWithToString {
        public $name;
    
        public function __construct($name) {
            $this->name = $name;
        }
    
        public function __toString() {
            return (string) $this->name;
        }
    }
    
    $input = unserialize('O:19:"MyClassWithToString":1:{s:4:"name";s:15:"/tmp/etc/passwd";}');
    if ($input instanceof MyClassWithToString) {
        unlink($input);
    }

    Во фреймворк запушили исправление с проверкой на is_string() перед тем как делать unlink(). Но если посмотреть внимательнее, то уязвимость касается десериализации данных от пользователя. А на php.net красным написано, что не стоит использовать unserializie() в подобных случаях.

    Более того, с 2017 года ошибки десериализации больше не считаются ошибками безопасности, просто потому что unserialize() никогда не будет безопасным (не только в PHP).

    Вот еще свежий пост об эксплуатации подобных багов на примере Yii.

Async PHP


  • Swoole PHP 4.6.0 — В свежем релизе асинхронного движка добавлен нативный асинхронный сURL.
  • amphp/mysql-dbal — Концепт асинхронного драйвера для Doctrine DBAL/ORM на базе Amphp v3.

Статьи


  • Масштабирование PHP FPM в Kubernetes в зависимости от нагрузки.
  • Свойства объекта и иммутабельность — Подробный анализ от Лари Гарфильда того, как ограничение на запись могут быть реализованы в PHP. В качестве вывода предлагает добавить раздельные модификаторы доступа на чтение и запись, то есть отдельные public/private для get и set
    и clone-with.

    Во второй части Лари рассматривает все идеи из первого поста на примере PSR-7.
  • Фундаментальный пост о работе с двоичными и битовыми данными в PHP
  • habr У Вас проблемы с legacy — значит, Вам повезло! Распил монолита на PHP

Аудио/Видео


  • video PHP Дайджест Live #2: асинхронный PHP в 8.1, нативные атрибуты, слоники.
  • video Прагматичное введение в Event Sourcing — от автора EventSaucePHP/EventSauce.
  • video Видео-код-ревью от Mathhew Napoli — В этом выпуске рассматривает пакет m50/simple.

Сообщество


  • habr 60+ чатов и ютуб-каналов для PHP-разработчика, которые советуют ребята из сообщества.
  • Модель PHP-слоника для 3D принтера.
  • github.com/thank-you-php — Открытое письмо благодарности PHP. Можно подписаться просто отправив пул-реквест и получить бейджик у себя в профиле.





Сегодня будет третий стрим по мотивам PHP Дайджеста. Разбор новостей и ссылок из выпуска с подробностями и деталями, обзор присланного, интересное но не вошедшее в выпуск, результаты розыгрыша и новый конкурс со слониками.
Начало в 20:00 Москва, Минск / 19:00 Киев.



Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра или телеграм.

Больше новостей и комментариев в Telegram-канале PHP Digest.

Прислать ссылку
Поиск ссылок по всем дайджестам
← Предыдущий выпуск: PHP Дайджест № 195
Источник: https://habr.com/ru/post/536726/


Интересные статьи

Интересные статьи

Всем привет! Продолжаем дайджесты новостей и других материалов о свободном и открытом ПО и немного о железе. Всё самое главное про пингвинов и не только, в России и мире. 20 лет проект...
Подборка свежих уроков, видео и пакетов по фреймворку Laravel за неделю. Читать дальше →
В этой подборке статей и новостей — Kotlin как продукт, навигационная битва, уроки для начинающих разработчиков и когнитивная перегрузка, происходящая прямо сейчас, лучшая типографика и л...
Всем привет! Продолжаем дайджесты новостей и других материалов о свободном и открытом ПО и немного о железе. Всё самое главное про пингвинов и не только, в России и мире. 29-ле...
К Новому году, как обычно, Санта и его помощники готовили подарки. Сегодняшнее утро не предвещало ничего необычного — всё шло по плану: гудел конвейер с игрушками для детей и взрослых, гномы ...