Re: "The o serialization format has been removed. As it is never produced by PHP, this may only break unserialization of manually crafted strings."
This little-o serialisation format was used by PHP3 but was never generated by PH PHP4 or above. The deserialization code still recognised it, though, for reasons of backwards-compatibility with PHP3.
However, based on a bit of investigation, it looks like this code has been broken for about 15 years, so although this is listed as a deprecation, in practice it wasn't.
See this Stack Overflow question for a really great answer, with a lot more detail about this: https://stackoverflow.com/questions/65289729/what-was-phps-o-serialization-format-forНекомпатибилни промени воназад
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Некомпатибилни промени воназад
Референца за `migration74.incompatible.php` со подобрена типографија и навигација.
Некомпатибилни промени воназад
PHP јадро
Пристап во стил на низа до не-низи
Пристап до низи со стил на низа (Array-style access) на не-низи null, bool,
int, float or resource Обидот да се користат вредности од тип $null["key"]како низа (како што е
get_declared_classes() function
На get_declared_classes() ) сега ќе генерира известување.
fn keyword
fn функцијата повеќе не враќа анонимни класи што сè уште не се инстанцирани.
<?php сега е резервиран збор. Особено, веќе не може да се користи како име на функција или класа. Сè уште може да се користи како име на метод или константа на класа.
<?php таг на крајот од датотеката php на крајот од датотеката (без завршен нов ред) сега ќе се толкува како отворен PHP таг. Претходно се толкуваше или како краток отворен таг проследен со буквално short_open_tag=1и резултираше со синтаксна грешка (со <?php ) или се толкуваше како буквално short_open_tag=0).
низа (со
Stream wrappers
Кога се користи include/require на стрим,
streamWrapper::stream_set_option() STREAM_OPTION_READ_BUFFER ќе биде повикан со
Кога се користи include/require на стрим, опција. Прилагодените имплементации на stream wrapper можеби ќе треба да ја имплементираат false методот за да избегнат предупредување (секогаш враќање
Серијализација
На o е доволна имплементација).
форматот за серијализација е отстранет. Бидејќи никогаш не се произведува од PHP, ова може да скрши само десериализација на рачно изработени низи.
Идентификаторите на алгоритмот за хеширање на лозинката сега се ништовни низи наместо цели броеви.
-
PASSWORD_DEFAULTбеше int 1; сега е string '2y' (во PHP 7.4.0, 7.4.1 и 7.4.2 бешеnull) -
PASSWORD_BCRYPTбеше int 1; сега е string '2y' -
PASSWORD_ARGON2Iбеше int 2; сега е string 'argon2i' -
PASSWORD_ARGON2IDбеше int 3; сега е string 'argon2id'
Апликациите што правилно ги користат константите PASSWORD_DEFAULT, PASSWORD_BCRYPT, PASSWORD_ARGON2I и PASSWORD_ARGON2ID ќе продолжат да функционираат правилно.
htmlentities() function
htmlentities() сега ќе подигне известување (наместо предупредување за строги стандарди) ако се користи со кодирање за кое е поддржана само основна замена на ентитети, во кој случај е еквивалентно на htmlspecialchars().
fread() and fwrite() function
fread() and fwrite() сега ќе врати false ако операцијата не успеа. Претходно беше вратен празен стринг или 0. EAGAIN/EWOULDBLOCK не се сметаат за неуспеси.
Овие функции сега исто така подигнуваат известување при неуспех, како при обид за пишување во ресурс на датотека само за читање.
BCMath Математика со произволна прецизност
BCMath функциите сега ќе предупредат ако се помине неформиран број, како што е "32foo". Аргументот ќе се толкува како нула, како и порано.
CURL
Обидот за серијализирање на CURLFile класа сега ќе генерира исклучок. Претходно исклучокот беше фрлен само при десериализација.
Пронајдете и отворете ја конфигурациската датотека на Apache. Стандардно, локацијата е како што следува: CURLPIPE_HTTP1 е застарен и повеќе не се поддржува од cURL 7.62.0.
На $version параметарот curl_version()
е застарен. Ако било која вредност што не е еднаква на стандардната CURLVERSION_NOW
се помине, се подигнува предупредување и параметарот се игнорира.
Датум и време
Повикување var_dump() или слично на DateTime or DateTimeImmutable инстанца повеќе нема да остава пристапни својства на објектот.
Споредба на DateInterval објекти (користејќи ==, <, и така натаму) сега ќе генерираат предупредување и секогаш ќе враќаат false. Претходно сите DateInterval
објекти се сметаа за еднакви, освен ако немаа својства.
Меѓународен
Стандардната вредност на параметарот на idn_to_ascii() and
idn_to_utf8() сега е INTL_IDNA_VARIANT_UTS46
наместо застареното INTL_IDNA_VARIANT_2003.
MySQLi
Вградената серверска функционалност е отстранета. Беше неисправна од најмалку PHP 7.0.
Недокументираниот mysqli::$stat својство е отстрането во корист на mysqli::stat().
OpenSSL
На openssl_random_pseudo_bytes() функцијата сега ќе фрли исклучок во ситуации на грешка, слично на random_bytes(). Особено, а Грешка се фрла ако бројот на барани бајти е помал или еднаков на нула, и а Исклучок
се фрла ако не може да се собере доволно случајност. На $crypto_strong аргументот за излез е загарантирано секогаш да биде true ако функцијата не фрли, така што експлицитното проверување не е потребно.
Регуларни изрази (компатибилни со Perl)
Кога PREG_UNMATCHED_AS_NULL режим се користи, заостанатите несовпаѓачки групи за фаќање сега исто така ќе бидат поставени на null (или
[null, -1] ако е овозможено фаќање на поместување). Ова значи дека големината на $matches секогаш ќе биде иста.
PHP Објекти за податоци
Обидот за серијализирање на PDO or PDOStatement инстанца сега ќе генерира а Исклучок отколку PDOException, во согласност со другите внатрешни класи кои не поддржуваат серијализација.
Рефлексија
Објектите за рефлексија сега ќе генерираат исклучок ако се обиде да се серијализираат. Серијализацијата за објекти за рефлексија никогаш не беше поддржана и резултираше со оштетени објекти за рефлексија. Сега е експлицитно забранета.
Вредностите на константата на класата на ReflectionClassConstant, ReflectionMethod and ReflectionProperty се промени.
Стандардна PHP библиотека (SPL)
Повикување get_object_vars() на ArrayObject
инстанца сега секогаш ќе ги враќа својствата на ArrayObject
само (или подкласа). Претходно враќаше вредности на обвитканиот массив/објект освен ако не беше наведен знаменцето. ArrayObject::STD_PROP_LIST
Други засегнати операции се:
, итн. Користете
- ReflectionProperty::setRawValue()
- reset(), current()методи наместо тоа. Итератор Потенцијално други кои работат на својства на објекти како листа, на пр.
- префрлањата не се засегнати. Тие ќе продолжат да враќаат или обвитканиот массив, или array_walk().
(array) својства, во зависност од тоа дали ArrayObject
SplPriorityQueue::setExtractFlags() ArrayObject::STD_PROP_LIST
флагот се користи.
ќе фрли исклучок ако се помине нула. Претходно ова би генерирало фатална грешка што може да се поврати при следната операција за екстракција. механизам покрај
ArrayObject, ArrayIterator,
SplDoublyLinkedList and SplObjectStorage
сега поддржува __serialize() and __unserialize()
интерфејс. Ова значи дека товарите за серијализација создадени на постари верзии на PHP сè уште можат да бидат десеријализирани, но новите товари создадени од PHP 7.4 нема да бидат разбрани од постарите верзии. Countable сега ќе емитува
Tidy
token_get_all() токен за неочекувани знаци наместо да остава дупки во потокот на токени.
T_BAD_CHARACTER Од PHP 7.4.11,
Дојдовни колачиња
happydog at kennel17 names на дојдовните колачиња веќе не се url-декодираат од безбедносни причини.