Други промени
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Други промени
Референца за `migration84.other-changes.php` со подобрена типографија и навигација.
Други промени
Core промени
Затворања
Closure names have been adjusted to include the parent function's name and the line of definition to make them easier to distinguish, for example within stack traces.
Влакна
Имињата на затворањата се прилагодени за да го вклучат името на родителската функција и линијата на дефиниција за да се олеснат за разликување, на пример во траги на стек.
Префрлувањето на влакна за време на извршувањето на деструкторот сега е дозволено. Претходно беше блокирано поради конфликти со собирањето отпад.
Деструкторите сега може да се извршуваат во посебно влакно: Влакно Кога собирањето отпад е активирано во влакно, деструкторите повикани од GC се извршуваат во посебно влакно: gc_destructor_fiber. Ако ова влакно се суспендира, се создава ново за извршување на преостанатите деструктори. Претходното gc_destructor_fiber веќе не се реферира од GC и може да се собере ако не се реферира на друго место. Објектите чиј деструктор е суспендиран нема да бидат собрани додека деструкторот не се врати или
Ракувачи со излез
се собира. flags
параметарот ob_start() статусни знаменца на ракувачот со излез предадени на
output_add_rewrite_var() сега се исчистени.
url_rewriter.hosts
наместо
session.trans_sid_hosts
сега користи
Промени во SAPI модули
apache2handler
за избирање домаќини што ќе бидат препишани.
CLI
Поддршката за EOL Apache 2.0 и 2.2 е отстранета. Минималната потребна верзија на Apache сега е 2.4.
FPM
Вградениот сервер бара индексна датотека рекурзивно со поминување низ родителските директориуми во случај да не може да се лоцира наведената датотека. Овој процес претходно беше прескокнат ако патеката изгледаше како да се однесува на датотека, т.е. ако последната компонента на патеката содржеше точка. Во тој случај, беше вратена грешка 404. Однесувањето е променето за да бара индексна датотека во сите случаи.
Испраќањето заглавија без тело сега ќе успее.
На /dev/poll events.mechanism
Страницата со статус има ново поле за прикажување на врвот на меморијата.
Променети функции
Јадро
trigger_error() and user_error() поставката за Solaris/Illumos е пензионирана. true наместо bool.
DOM
сега има тип на враќање
DOMDocument::registerNodeClass() true наместо
boolсега има привремен тип на враќање true . Во пракса можеше да врати само
Хеш
hash_update()
DOMDocument::registerNodeClass() true наместо
boolсега има привремен тип на враќање true . Во пракса можеше да врати само
Меѓународен
NumberFormatter::ROUND_TOWARD_ZERO and
NumberFormatter::ROUND_AWAY_FROM_ZERO
се додадени како алијаси за
NumberFormatter::ROUND_DOWN and
NumberFormatter::ROUND_UP
за да биде во согласност со новото
PHP_ROUND_* modes.
. Претходно беа од тип
DOMDocument::registerNodeClass() ResourceBundle|array|string|int|null.
На idn_to_ascii() and idn_to_utf8()
функциите сега секогаш фрлаат ValueErrorСега фрла domain името е празно или предолго.
На idn_to_ascii() and idn_to_utf8()
функциите сега секогаш фрлаат ValueError
ако variant параметарот не е
INTL_IDNA_VARIANT_UTS46.
LibXML
libxml_set_streams_context() сега веднаш фрла TypeError кога на функцијата ќе ѝ се предаде ресурс што не е stream-context, наместо да фрла подоцна кога ќе се користи stream-context.
MBString
Однесувањето на mb_strcut() сега е поконзистентно на невалидни UTF-8 и UTF-16 низи. Нема промена во однесувањето за валидни UTF-8 и UTF-16 низи.
ODBC
На row of
odbc_fetch_object(),
odbc_fetch_array()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
odbc_fetch_into() сега имаат стандардна вредност од null, во согласност со odbc_fetch_row(). Претходно, стандардните вредности беа
-1,
-1Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во 0, соодветно.
OpenSSL
На extra_attributes in
openssl_csr_new() поставува CSR
атрибути наместо DN на субјектот, што претходно беше направено погрешно.
На dn in
openssl_csr_new() овозможува поставување на array
вредности за единечен запис.
Ново serial_hex додадено на
openssl_csr_sign() за да се овозможи поставување сериски броеви во хексадецимален формат.
Парсирање на ASN.1 UTCTime со openssl_x509_parse()
се урива ако секундите се изоставени за верзија на OpenSSL под 3.2 (-1 се враќа за такви полиња). OpenSSL верзија над 3.3 веќе не вчитуваше такви сертификати.
PDO
Сега е можно да се преземе вредноста на
PDO::ATTR_STRINGIFY_FETCHES атрибутот со
Добиј информации за MySQL хост.
Нов PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE
е додаден за да се добие употребата на меморијата на резултатите од прашањата со
Добиј информации за MySQL хост за драјвери што го поддржуваат.
PDO_FIREBIRD
Сега е можно да се преземе вредноста на
FB_ATTR_DATE_FORMAT,
FB_ATTR_TIME_FORMAT,
FB_ATTR_TIMESTAMP_FORMAT, атрибути со
Добиј информации за MySQL хост.
Додадени нови атрибути за специфицирање на нивото на изолација на трансакцијата и режимот на пристап. Додадени се пет константи поврзани со оваа функционалност:
Pdo\Firebird::TRANSACTION_ISOLATION_LEVELPdo\Firebird::READ_COMMITTEDPdo\Firebird::REPEATABLE_READPdo\Firebird::SERIALIZABLEPdo\Firebird::WRITABLE_TRANSACTION
При користење на постојани врски, сега има проверка за живост во конструкторот.
Содржината што се гради се менува во зависност од вредноста на
FB_API_VER in
ibase.h. Нова статичка метода Pdo\Firebird::getApiVersion()
може да се користи за добивање на оваа информација. Оваа информација сега се споменува и во phpinfo().
Пет нови типови на податоци сега се достапни:
INT128, DEC16, DEC34, TIMESTAMP_TZ, TIME_TZ
. Тие се достапни почнувајќи од Firebird 4.0.
PDO_MYSQL
Сега е можно да се преземе вредноста на
PDO::ATTR_FETCH_TABLE_NAMES атрибутот со
Добиј информации за MySQL хост.
PDO_PGSQL
Поддршка за преземање на употребата на меморијата на прашањата за
PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE.
Ако колоната е од тип FLOAT4OID or
FLOAT8OID вредноста сега ќе биде вратена како
float наместо string.
PGSQL
На conditions параметарот
pg_select() сега е опционално и прифаќа празна низа.
Phar
На Phar::setAlias(), Phar::setDefaultStub() методите сега имаат пробен тип на враќање на true наместо bool.
POSIX
posix_isatty() сега го поставува бројот на грешката кога аргументот за дескриптор на датотека/поток е невалиден.
Рефлексија
ReflectionGenerator::getFunction() сега може да се повика откако генераторот заврши со извршување.
Приклучоци
На backlog параметарот
socket_create_listen() сега има стандардна вредност од
SOMAXCONN. Претходно, беше 128.
Натриум
На sodium_crypto_aead_aes256gcm_* функциите сега се достапни на aarch64 процесори со ARM криптографски екстензии.
SPL
На SplPriorityQueue::insert(), SplPriorityQueue::recoverFromCorruption(), SplHeap::insert(), Врати се од корумпирана состојба и дозволи понатамошни дејства на купот методите сега имаат пробен тип на враќање на true наместо bool.
SplObjectStorage сега имплементира SeekableIterator.
Стандардно
Стандардното 'cost' вредност за PASSWORD_BCRYPT
алгоритам за хеширање за password_hash() е зголемен од
10 to 12.
debug_zval_dump() сега покажува дали низата е спакувана.
long2ip() сега има тип на враќање на string
наместо string|false.
highlight_string() сега има тип на враќање на
string|true наместо string|bool.
print_r() сега има тип на враќање на
string|true наместо string|bool.
Закружување со round()
На mode Овие константи се користат за
round() функцијата е проширена за да прифаќа
RoundingMode|int, прифаќајќи инстанци на нов RoundingMode enum.
Додадени се четири нови режими на round() функцијата: RoundingMode::PositiveInfinity, RoundingMode::NegativeInfinity, RoundingMode::TowardsZero, RoundingMode::AwayFromZero
Внатрешната имплементација за заокружување на цели броеви е препишана за да биде полесна за проверка на точноста и полесна за одржување. Како резултат на препишувањето, поправени се некои грешки при заокружување. На пример, претходно заокружувањето 0.49999999999999994
до најблискиот цел број би резултирало со 1.0
наместо точниот резултат 0.0. Дополнителни влезови може да бидат засегнати и да резултираат со различни излези во споредба со претходните PHP верзии.
Поправена е грешка предизвикана од „претходно заокружување“ на round() функција. Претходно, користењето на „претходно заокружување“ за третирање на вредност како 0.285
(всушност 0.28499999999999998) како децимален број и заокружување до 0.29. Сепак, „претходно заокружување“ неправилно заокружува одредени броеви, така што овој поправка го отстранува „претходното заокружување“ и го менува начинот на споредување на броевите, така што вредностите се правилно заокружени како децимални броеви.
Максималната прецизност што може да се обработи од round()
е проширена за една цифра. На пример, round(4503599627370495.5) вратено во
4503599627370495.5, но сега враќа 4503599627370496.
Други промени во екстензиите
cURL
Минималната потребна верзија на libcurl сега е 7.61.0.
На CURLOPT_DNS_USE_GLOBAL_CACHE опцијата веќе нема никакво влијание и се игнорира тивко. Оваа основна функција беше отфрлена во libcurl 7.11.1, а отстранета во libcurl 7.62.0.
GMP
Претворање на GMP објект до bool е сега можно наместо да емитува E_RECOVERABLE_ERROR. Поведението на кастинг е преоптоварено така што GMP
објект што го претставува вредноста 0 се префрла на false.
LibXML
Минималната верзија на libxml2 потребна сега е 2.9.4.
Меѓународен
Поведението на класата Intl е нормализирано за секогаш да фрла Грешка исклучоци при обид за користење на неиницијализиран објект, или кога клонирањето не успее.
MBString
Табелите со податоци за Unicode се ажурирани на Unicode 16.0.
MySQLnd
Поддршка за новиот тип на податоци VECTOR од MySQL 9.
OpenSSL
Минималната верзија на OpenSSL потребна сега е 1.1.1.
PDO_PGSQL
Минималната верзија на libpq потребна сега е 10.0.
PGSQL
Минималната верзија на libpq потребна сега е 10.0.
SPL
Пристапи надвор од границите во SplFixedArray сега фрлаат исклучоци од типот OutOfBoundsException наместо RuntimeException. Бидејќи OutOfBoundsException е подкласа на RuntimeException не се прикажуваат промени во однесувањето при обид за фаќање на тие исклучоци.
XSL
Типизираните својства XSLTProcessor::$cloneDocument and XSLTProcessor::$doXInclude сега се декларирани.
(libcurl >= 8.7.0),
Минималната верзија на zlib потребна сега е 1.2.11.
Оваа функција е достапна кога PHP е поврзан со библиотеки на Oracle Database од верзија 10
Јадро
Improved the performance of floating point number parsing and formatting in ZTS builds under highly concurrent loads. This affects the printf() family of functions as well as serialization functions such as json_encode(), или serialize().
sprintf() using only %s and
%d specifiers will be compiled into the equivalent string interpolation, avoiding the overhead of a function call and repeatedly parsing the format string.
BCMath
Improved performance of number conversions and operations.
DOM
The performance of DOMNode::C14N() is greatly improved for the case without an xpath query. This can give a time improvement of easily two order of magnitude for documents with tens of thousands of nodes.
Improved performance and reduce memory consumption of XML serialization.
Reduced memory usage of node classes.
FTP
Improved the performance of FTP uploads up to a factor of 10x for large uploads.
Хеш
Added SSE2 and SHA-NI implementations of SHA-256. This improves the performance on supported CPUs by ~1.3x (SSE2), and 3x - 5x (SHA-NI). Credit to Colin Percival / Tarsnap for this optimization.
MBString
mb_strcut() is much faster now for UTF-8 and UTF-16 strings.
Looking up mbstring encoding names is much faster now.
The performance of converting SJIS-win to Unicode is greatly improved.
MySQLnd
Improved the performance of MySQLnd quoting.
PCRE
Improved the performance of named capture groups.
— Разни функции
Improved the performance of Random\Randomizer, with a specific focus on the . Претходно обиченПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во што содржи бараниот број на случајни бајти. methods.
SimpleXML
Improved performance and reduce memory consumption of XML serialization.
Стандардно
The performance of strspn() and strcspn() is greatly improved. They now run in linear time instead of being bounded by quadratic time.
Improved the performance of strpbrk().
get_browser() е многу побрзо сега, до 1,5x - 2,5x за некои тест случаи.