Свежая подборка со ссылками на новости и материалы. В выпуске: релиз PHP 8.0.1, MySQL движок на PHP от Vimeo и другие релизы, обновленный Enum и свежие предложения для PHP 8.1, «уязвимость» в Laminas, инструменты, статьи, видео, PHP Дайджест Live в 20:00 МСК.
Приятного чтения!
http://php.net\@aliyun.com/aaa.do
. В 8.0 и 7.4 еще дополнительно пачка исправленных багов. value()
теперь просто свойство. Обзор предложения был в выпуске № 194 и на стриме.variadic_function(...['apple', 'banana', 'lemon']);
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
$array1 = ['a' => 'apple', 'p' => 'pear'];
$array2 = ['b' => 'banana', 'o' => 'orange'];
$array = [...$array1, ...$array2];
// Приблизительно то же самое что:
$array = array_merge($array1, $array2);
htmlspecialchars()
почти всегда используется с флагами ENT_QUOTES
и ENT_SUBSTITUTE
:$GLOBALS
начиная с PHP 8.1 $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
true
, если передать в нее массив с последовательными целочисленными ключами 0, 1, 2 ... count($value)-1
. Функция переименована из is_list()
в array_is_list()
. О причинах было подробнее на стриме.ray($anything)
в своем коде, и при запуске PHP-скрипта оно красиво отображается в отдельном десктопном приложении.var_dump(...)/die()
, то может быть интересно.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()
в подобных случаях.unserialize()
никогда не будет безопасным (не только в PHP). Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку хабра или телеграм.
Больше новостей и комментариев в Telegram-канале PHP Digest.
К сожалению, не доступен сервер mySQL