Русский
Русский
English
Статистика
Реклама

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


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

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



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



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.

Инструменты


  • dollarDump 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



Laravel



Yii



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 Дайджеста. Разбор новостей и ссылок из выпуска с подробностями и деталями, обзор присланного, интересное но не вошедшее в выпуск, результаты розыгрыша и новый конкурс со слониками.
Начало в 20:00 Москва, Минск / 19:00 Киев.



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

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

Прислать ссылку
Поиск ссылок по всем дайджестам
Предыдущий выпуск: PHP Дайджест 195
Источник: habr.com
К списку статей
Опубликовано: 11.01.2021 14:11:20
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Разработка веб-сайтов

Php

Symfony

Yii

Laravel

Дайджест

Php-дайджест

Php 8.1

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru