その他の変更PHP コアFFIopcache.preload_user が現在のシステムユーザーに設定されている場合、事前ロードの間に FFI::load をコールできるようになりました。これより前のバージョンでは、opcache.preload_user が設定されている場合は、事前ロードの間に FFI::load を呼び出せませんでした。 FPMソケットのパスの長さが OS がサポートする長さ以上の場合、FPM CLI のテストが失敗するようになりました。 OpcacheCLI SAPI と phpdbg SAPI では、opcache.preload_user ディレクティブを設定しなくても root として事前ロードを実行できるようになりました。これら以外の SAPI では、root として事前ロードを実行する際に このディレクティブの設定が未だ必須です。なぜなら、SAPI が特権を持っていないユーザに移行する前に事前ロードが実行されるからです。 Streamsソケット接続をブロックする fread 関数は、バッファリングされているデータが存在した場合、追加のデータを待つのではなく、すぐに値を返すようになりました。 seek のオフセットが終端を超えた場合でも、memory ストリームは失敗しなくなりました。代わりに、次回書き込まれたときにメモリサイズが増加し、以前の終端からオフセットまでの間は、ファイルを扱っているときのようにゼロバイトで埋められます。 stat のファイルアクセス操作が、file_exists 類似の関数と同様に、ストリームのパスではなく、実在のパスを使うようになりました。これはストリームをオープンするときの振る舞いと一致します。 SAPI モジュールへの変更CLI
変更された関数PHP コアgc_status に、以下の8つのフィールドが追加されました:
class_alias は、内部クラスのエイリアスを作成する操作もサポートしました。
ユーザー定義の例外ハンドラは、シャットダウン時の例外もキャッチするようになりました。
highlight_string と highlight_file の結果として出力されるHTMLが、変更されました。外側のHTMLタグの間にあるホワイトスペースは削除されます。改行とスペースはHTMLエンティティに変換されなくなりました。HTML全体を Calendareaster_date は、64ビットシステム上で 1970 から 2,000,000,000 までの年の値をサポートしました。これより前のバージョンでは、1970 から 2037 までの年の値だけをサポートしていました。 Curl
curl_getinfo は、新しく2つの定数をサポートしました: DOMDOMCharacterData::appendData の仮の戻り値の型が、true に変更されました。
DOMDocument::loadHTML, DOMDocument::loadHTMLFile, DOMDocument::loadXML の仮の戻り値の型が、bool になりました。これより前のバージョンでは、 Gd
imagerotate 関数のシグネチャが変更され、 国際化関数
datefmt_set_timezone (とそのエイリアス IntlDateformatter::setTimeZone) は、成功時に
IntlBreakiterator::setText は、失敗時に
IntlChar::enumCharNames は、戻り値として boolean を返すようになりました。これより前のバージョンでは、成功時に
IntlDateFormatter::__construct は、無効なロケールを設定した場合に マルチバイト文字列
mb_strtolower と mb_convert_case は、ギリシャ文字シグマの条件付きケース変換規則を実装しました。mb_convert_case では、条件付きケース変換は
mb_decode_mimeheader は、RFC 2047 で要求された通りに、Qprint でエンコードされた単語のアンダースコアを解釈するようになりました。つまり、それらはスペースに変換されます。このようにMIMEエンコードされた単語では、アンダースコアは mb_encode_mimeheader の実装が変更され、レアケースではあるものの、PHP 8.2 で生の ASCII として渡されていた入力文字列が、transfer_encoding の値でエンコードされる場合があります。 mb_encode_mimeheader は、入力文字列が Qprint エンコーディングの場合に、NUL(ゼロ)バイトを削除しなくなりました。これより前のバージョンでは、あるテキストエンコーディングの場合(特に UTF-16 と UTF-32) に NUL バイトが削除され、mb_encode_mimeheader の結果が壊れる場合がありました。
mb_detect_encoding の "$strict に true を指定しない" モードが、ドキュメントの通りに振る舞うようになりました。これより前のバージョンでは、入力文字列と同一のバイト(たとえば、最初のバイト) が、候補となるエンコーディングのリスト全てに対して不正と判定された場合でも、 mysqli
mysqli_fetch_object は、
mysqli_poll は、 mysqli_field_seek と mysqli_result::field_seek の戻り値の型が、bool ではなく true に変更されました。 ODBC
odbc_autocommitは、 PostgreSQL
pg_fetch_object は、
pg_insert は、指定されたテーブルが無効な場合に、
pg_insert と pg_convert は、フィールドの値/タイプ が PostgreSQL の型と一致しない場合に、
pg_fetch_result, pg_field_prtlen, pg_field_is_null のパラメータ Random
mt_srand と srand は、ランダムなシードを使うかを決めるために、引数の数をチェックしなくなりました。 リフレクションReflectionClass::getStaticProperties の戻り値の型は、nullable ではなくなりました。 標準ライブラリ
unserialize で発生していた
処理されていない入力が残っている場合に、unserialize は新たに array_pad は、配列が持つことができる最大の要素数だけを制限するようになりました。これより前のバージョンでは、一度に追加できる最大の要素数が 1048576 になっていました。
strtok は、トークンの分割を開始した際にトークンが与えられていない場合、
password_hash は、ソルトの生成が失敗した場合に、ValueError の
proc_open の
proc_open の array_sum と array_product は、配列に含まれる値が int/float に変換できない場合、警告を発生させるようになりました。これより前のバージョンでは、配列とオブジェクトは無視され、それら以外の値は int にキャストされていました。さらに、数値へのキャストを定義しているオブジェクト (例: GMP) は、無視されるのではなく、数値に変換されるようになっています。
number_format の
strrchr に str_getcsv と fgetcsv は、最後のフィールドに終端されていないクォートだけが含まれている場合、null バイトの文字列をひとつ返すのではなく、空文字列を返すようになりました。 拡張モジュールへのその他の変更PHP コア
bool 型の値に対して、加算子/減算子 (
null 型の値に対して、減算子 (
内部オブジェクトで、_IS_NUMBER キャストを実装しているものの、加算と減算の振る舞いを上書きする do_operator ハンドラを実装していない場合があります。この場合でも、 DOMDOM の寿命を管理する仕組みが書き直され、暗黙のうちに削除されていたノードが取得できるようになりました。これより前のバージョンでは、削除されていたノードを取得しようとすると例外が発生していました。 SQLite3SQLite3 クラスは、Exception ではなく、(Exception を継承した) SQLite3Exception をスローするようになりました。 SQLite のエラーコードは、エラーメッセージに含められるのではなく、例外に渡されるようになりました。 INI ファイルの扱いの変更
パフォーマンスに関わる変更DOMDOMNodeList をループさせた場合、キャッシュを使うようになりました。よって、ノードをリクエストする処理に、デフォルトで O(n^2) 時間かかることはなくなりました。 ノードからテキストを取得する際に、メモリを確保する処理を避けるようになりました。この結果、パフォーマンスが向上しています。 DOMChildNode::remove は、計算量が O(1) で実行されるようになりました。 標準ライブラリfile 関数の flags パラメータのエラーチェックは、約7% 高速になりました。 Standard PHP Library(SPL)RecursiveDirectoryIterator を使ってディレクトリをループする場合の、I/O が削減されました。 |