其他變更

SAPI 模塊的變更

CLI

如果沒(méi)有安裝 readline 擴(kuò)展,使用 -a 選項(xiàng)現(xiàn)在將導(dǎo)致錯(cuò)誤。在之前,如果沒(méi)有 readline 擴(kuò)展的話 -a 與直接無(wú)參數(shù)調(diào)用 php 的表現(xiàn)一樣,除了額外顯示一行 "Interactive mode enabled" 消息。這個(gè)模式非交互模式

PHPDBG

phpdbg 的遠(yuǎn)程功能已經(jīng)被移除。

函數(shù)的變更

核心

foreach、var_dump() 、序列化()、對(duì)象對(duì)比等場(chǎng)景中屬性的順序發(fā)生了改變。 現(xiàn)在,屬性將根據(jù)它們的聲明與繼承進(jìn)行排序,在基類(lèi)中聲明的屬性將排在子類(lèi)屬性之前。

這個(gè)順序與 zend_object 結(jié)構(gòu)中屬性的內(nèi)部布局保持一致,并且重復(fù)了 default_properties_table[]properties_info_table[] 中的順序。舊的順序沒(méi)有被記錄下來(lái),是由類(lèi)的繼承實(shí)現(xiàn)細(xì)節(jié)造成的。

Filter

FILTER_VALIDATE_INT 過(guò)濾器的 FILTER_FLAG_ALLOW_OCTAL 標(biāo)識(shí)現(xiàn)在接受帶八進(jìn)制前綴("0o"/"0O")的八進(jìn)制字符串。

GMP

所有的 GMP 函數(shù)現(xiàn)在接受帶八進(jìn)制前綴( "0o"/"0O")的八進(jìn)制字符串。

PDO ODBC

帶著 PDO::ATTR_SERVER_INFOPDO::ATTR_SERVER_VERSION 常量的 PDO::getAttribute() 方法現(xiàn)在返回的是值而不是拋出 PDOException 異常。

Reflection

ReflectionProperty::setAccessible()ReflectionMethod::setAccessible() 將不再起作用。屬性和方法現(xiàn)在總被認(rèn)為是能夠通過(guò)反射訪問(wèn)的。

常規(guī)

syslog() 現(xiàn)在是二進(jìn)制安全的。

其他擴(kuò)展變更

GD

imagewebp() 現(xiàn)在可以通過(guò)傳遞 IMG_WEBP_LOSSLESS 作為質(zhì)量來(lái)實(shí)現(xiàn)無(wú)損的 WebP 編碼了。

這個(gè)常量只有在所使用的 libgd 支持無(wú)損 WebP 編碼的情況在才會(huì)被定義。

MySQLi

在連接 libmysqlclient 時(shí),mysqli_stmt::next_result()mysqli::fetch_all() 現(xiàn)在可以使用了。

OpenSSL

  • OpenSSL 擴(kuò)展 現(xiàn)在至少需要 OpenSSL 1.0.2 版本。

  • 現(xiàn)在已經(jīng)支持 OpenSSL 3.0 了。請(qǐng)注意許多密碼算法(部分老的提供者)不再是默認(rèn)啟用的,以及參數(shù)校驗(yàn)(例如:最小秘鑰長(zhǎng)度)比以前更加嚴(yán)格了。

Phar

  • 現(xiàn)在簽名的默認(rèn)算法為 SHA256。

  • 簽名算法增加了對(duì) OpenSSL_SHA256 和 OpenSSL_SHA512 的支持。

SNMP

  • 為安全協(xié)議增加了對(duì) SHA256 和 SHA512 的支持。

常規(guī)

--with-password-argon2 現(xiàn)在使用 pkg-config 來(lái)檢測(cè) libargon2。因此現(xiàn)在應(yīng)該使用 PKG_CONFIG_PATH 來(lái)修改 libargon2 的位置。

INI 文件處理的變化

  • INI 配置項(xiàng) log_errors_max_len 已經(jīng)被移除。從 PHP 8.0.0 開(kāi)始將不再起作用。

  • 一個(gè)在引用字符串中的前置美元符號(hào)現(xiàn)在可以被轉(zhuǎn)義:"\${" 將會(huì)被解釋為內(nèi)容包含 ${ 的字符串。

  • 雙引號(hào)內(nèi)的字符串中反斜線現(xiàn)在被更一致地視為轉(zhuǎn)義字符。之前 "foo\\" 的后面如果是除換行之外的其他字符是不被視為一個(gè)終止字符串的?,F(xiàn)在,它被解釋成一個(gè)內(nèi)容為 foo\的字符串。然而有一個(gè)例外的地方是后面跟著換行符的字符串 "foo\" 將繼續(xù)被視為一個(gè)有效的、內(nèi)容為 "foo\" 的字符串,而不是一個(gè)還沒(méi)有結(jié)束的字符串。這個(gè)例外的存在是為了天然支持 Windows 文件路徑的使用,如 "C:\foo\"。