その他の変更PHP コアPHP コア
macOS における高精度なタイマー(hrtime)
は、 CGI/CLI-z や、 --zend-extension オプションは、 機能していないため削除されました。 -d zend_extension=[path] を代わりに使ってください。 PDO_ODBC大きなカラムのフェッチ動作が変更されました。 256 バイトのブロックをフェッチする代わりに、 PDO_ODBC はより大きなブロックサイズをフェッチしようとするようになります。 現状このブロックサイズは、 ページサイズから文字列オーバーヘッドを差し引いたサイズです。 SQLGetData で SQL_NO_TOTAL を返すドライバも同様に、 適切に処理されるようになります。 この変更で、互換性とパフォーマンスが改善するはずです。 SAPI モジュールへの変更CLIcli_set_process_title に長過ぎるタイトルを設定しようとした場合、 黙ってタイトルを切り詰めるのではなく、 失敗するようになりました。 ビルトインのデフォルト値から変更されている INI 設定を出力するオプションとして、 --ini=diff オプションが追加されました。 FPMhttpd ProxyPass を経由した FPM は、 オプションでスクリプトの完全なパスをデコードします。 この新しい振る舞いは、 追加された fastcgi.script_path_encoded INI ディレクティブで抑止できます。 FPM のアクセスログの長さの上限は、 log_limit の値を尊重するようになりました。 変更された関数Intl
grapheme_extract は、
無効な開始バイトをスキップする際に
transliterator_get_error_code,
transliterator_get_error_message,
TransLiterator::getErrorCode,
TransLiterator::getErrorMessage の戻り値の
union 型から
以下の関数は、 LDAP
ldap_get_option は、
ldap_set_option と同様に、
libxmllibxml_set_external_entity_loader は、 戻り値の型を正式に true としました。 OpenSSL
openssl_public_encrypt と
openssl_private_decrypt は、
OAEP パディング向けのハッシュダイジェストアルゴリズムを指定するために、
新しく
openssl_sign と
openssl_verify は、
よりセキュアな RSA PSS パディングを使えるようにするために、
新しく
openssl_cms_encrypt の PCNTLpcntl_exec は、 戻り値の型を正式に false としました。 pcntl_waitid は、 子プロセスに関する様々なプラットフォーム固有のメトリクスを収集するため、 追加で resource_usage 引数を受け取るようになりました。 PDO_PGSQLPdo\Pgsql::copyFromArray は、 iterable の入力をサポートするようになりました。
Pdo\Pgsql::setAttribute と
Pdo\Pgsql::prepare は、
PostgreSQLpg_copy_from は、 iterable の入力をサポートするようになりました。 pg_connect は、 connection_string 引数に null バイトが含まれているかをチェックするようになりました。 pg_close_stmt は、 statement_name 引数に null バイトが含まれているかをチェックするようになりました。 POSIXposix_ttyname は、 ファイルディスクリプタが無効な場合に、 last_error に EBADF を設定するようになりました。
posix_isatty は、
ファイルディスクリプタが無効な場合に、
posix_fpathconf は、
ファイルディスクリプタが無効かどうかをチェックし、
無効な場合に last_error に EBADF を設定しつつ、
ReflectionReflectionClass::__toString の列挙型の出力について、 クラスが列挙型であることをより明確に示すように変更されました。 また、列挙型の case は通常のクラス定数ではなく、 列挙型の case であることを示すようになりました。 ReflectionProperty::__toString の、 フックを持つプロパティの出力は、プロパティがどのフックを持つか、 それらのフックが final かどうか、 およびプロパティが仮想かどうかを示すように変更されました。 これは、クラスがフックされたプロパティを含む場合の ReflectionClass::__toStringの出力にも影響します。 Sockets
socket_create/socket_bind は、
socket_getsockname は、
Zlib
gzfile, gzopen,
readgzfile 関数の
gzfile, gzopen, readgzfile 関数は、 デフォルトのストリームコンテキストを尊重するようになりました。 拡張モジュールへのその他の変更cURL
curl_setopt に指定する
Fileinfofile が、5.45 から 5.46 に更新されました。 finfo_close の戻り値の型が、 bool ではなく、true に変更されました。 IntlIntl の内部エラー処理機構がモダンになり、 どの呼び出しがどのエラーを引き起こしたかを、 より正確に示せるようになりました。 さらに、一部の ext/date の例外は、 IntlException でラップされるようになっています。 Lexborlexbor 拡張モジュールが追加されました。 これは常に有効になっています。 他の拡張モジュールで再利用できるようにするため、 ext/dom から分離された lexbor ライブラリが含まれています。 この新しい拡張モジュールは、ユーザーランドに直接公開されません。 OpcacheOpcache 拡張モジュール は、 常に PHP バイナリに組み込まれ、ロードされるようになりました。 opcache.enable と opcache.enable_cli の設定はまだ有効です。 PCREpcre2lib が、10.44 から 10.46 に更新されました。 PDO_Sqliteサポートされる最低リリースバージョンが、 3.7.7 から 3.7.17 に変更されました。 Readlinereadline_add_history, readline_clear_history, readline_callback_handler_install の戻り値の型が、 bool ではなく、true に変更されました。 ReflectionReflectionConstant クラスは、 final ではなくなりました。 INI ファイルの扱いの変更PHP コア致命的なエラーにバックトレースを含めるかどうかを制御するために、 fatal_error_backtraces INI ディレクティブが追加されました。 起動時にのみ有効な、max_memory_limit INI ディレクティブが追加されました。 これは、起動時または実行時に設定可能な memory_limit の最大値を制御するためのものです。 この値を超えると、-1 を設定しない限り警告が発生し、 memory_limit の値が、超過した値の代わりに現在の max_memory_limit の値に設定されます。 Opcache
opcache.file_cache
で指定されたディレクトリが読み取り専用だった場合をサポートするために、
opcache.file_cache_read_only が追加されました。
これは、読み取り専用ファイルシステム(例:読み取り専用 Docker コンテナ)向けです。
opcache.jit_hot_loop のデフォルト値は、ループ反復回数の倍数にならないように、 61 (素数) に設定されました。 このパラメータには、素数の値を設定することを推奨します。 OPcache SHM が既にセットアップされている状態で、 opcache.memory_consumption の値を変更した場合に、正しく失敗を報告するようになりました。 これより前のバージョンでは、黙って何もせず、 PHPInfo で誤解を招く値を表示していました。 OpenSSLOpenSSL のライブラリコンテキストタイプを選択できるようにするため、 openssl.libctx INI ディレクティブを追加しました。 スレッドごとにカスタムの libctx を使うか、 グローバルな、単一の libctx (デフォルト)を使えます。 パフォーマンスに関わる変更PHP コア
boolean 値との同一性の比較に関する OPcode が、
特に
例外オブジェクトを生成する速度が大幅に向上しました。 SSE2 を使用していたコードは、 ARM NEON による SIMD 命令も使うように調整されました。 x86_64 または aarch64 アーキテクチャで Clang>=19 を使用してコンパイルする場合、 デフォルトで有効となる TAILCALL VM を導入しました。 TAILCALL VM は、 GCC コンパイル時に使用される HYBRID VM と同等の速度を実現します。 これにより、Clang>=19 でビルドされた PHP バイナリは、 GCC でビルドされたバイナリと同等の速度を発揮します。 他のコンパイラで使用される CALL VM のパフォーマンスも大幅に改善されました。 Intlcollator で文字列変換を行う際、余計な文字列コピーをしなくなりました。 MBStringSSE2 を使用していたコードは、 ARM NEON による SIMD 命令も使うように調整されました。 OpcacheGlibc 以外のビルドで JIT コンパイルされたコード中で、 TLS 変数のフェッチ処理のパフォーマンスが向上しました。 Reflection以下のメソッドのパフォーマンスが向上しました:
SPLSplFixedArray の、 添字アクセス(次元アクセサ)と、メソッドのパフォーマンスが向上しました。 Standardコールバックを指定した場合の、配列関数 (array_find, array_filter, array_map, usort, ...) のパフォーマンスが向上しました。 urlencode と rawurlencode のパフォーマンスが向上しました。 一時的な文字列の生成と再パースを回避することで、 unpack の、 名前を付けない反復処理のパフォーマンスが向上しました。 pack のパフォーマンスが向上しました。 array_chunk のパフォーマンスが少し向上しました。 XMLXMLReader の、 プロパティアクセスのパフォーマンスが向上しました。 XMLWriter のパフォーマンスが向上し、 メモリ使用量が削減されました。 |