今週の PHP 2022/11/19 〜 2022/11/25
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
リリース
8.1 系の最新リリースがありました。各種バグフィックスが入っています。
延期されている 8.2 ですが、RC7 がリリースです。まだまだ、コア周りの修正マージが入ってきています。次は間に合うといいな...
8.2.0RC7 https://downloads.php.net/~pierrick/
Microseconds to error log
マイクロ秒をログに入れましょうという提案の続報です。
-
php_format_timestamp
という関数を追加(Cのソース) -
error_log_usec
という設定項目を追加
修正内容は下記です。
これについては、php_format_date
にフォーマットはまとめた方が良くない?っというレビューコメントが付きましたが、internals の今までの議論で、BC Break はやめようといわれた件が返信されてます。
ところで、これって RFC いらないやつなのかな??
PHP_STREAM_TO_ZVAL
マクロの話。
PHP_STREAM_TO_ZVAL
は、なんでこの名前なの?というお便り。 実際の処理内容は php_stream_from_res
ということで、逆のような内容です。
「間違えたんじゃない?修正PRください」という返事がありました。
現職のソースコードでも、名前と処理内容が異なるケースがあるんですが、ソースコードを読む際にめちゃくちゃ困るので、こういう指摘&修正は良いですね。
PHP: rfc:randomizer_additions
vote 終了です。2つの提案がありましたが、両方とも受理されました。めでたし。
Using less generic exceptions for dates - Externals
new DateTime('foo');
このコードは、Exception
をスローします。これ、一般的すぎませんか?もうちょっと、詳細な例外を出しませんか?
例えば DateException
というお便り。
Tim さんからは、DateException
を頂点とした例外ツリーを作ると良いのでは?という提案
なお、例として Random の際の例外ツリーの実装をあげてくれました。
Bugs
FPM does not reset fastcgi.error_header · Issue #9981 · php/php-src
fastcgi.error_haeder
の設定に HTTP/1.1 500 Internal Server Error
などが設定されていた場合に
- 実際にエラーが発生すると、設定したヘッダーが送られる。
- その後、同じ fpm の child が処理するリクエストは、成功したとしても status コードが 500 のままになってしまう。
そもそも、設定したことないけど、これは明白に不具合。
こんなの気づけない。怖い。
修正はこちら
For UTF-7, flag unnecessary extra trailing byte in Base64 section as error by alexdowad · Pull Request #9977 · php/php-src
UTF-7 における Base64 section の余剰バイトのフラグをエラーとして扱うという不具合の修正
そもそも、UTF-7 を扱う機会というものはそれほどあるのだろうか?もしくは、意識せずに使っているのか。
いずれにしろ修正されたことは良いこと。
Implement $this return type by nikic · Pull Request #7470 · php/php-src
いわゆる Fluent API と呼ばれる、インスタンスのメソッドが、インスタンス自身を返す $this
という返り値について、ナイスアイデアだけど、なんで止まってるの?
という、素朴な質問が投げかけられていました。
RFC は下記。
PHP: rfc:this_return_type https://wiki.php.net/rfc/this_return_type
なるほど、便利そう。PHPStan 使えば、今でも出来ますね。(self でも OK)
Fix GH-8517: FPM child pointer can be possibly uninitialized by bukka · Pull Request #9444 · php/php-src
FPM の child のポイントが初期化されていない可能性があるというイシューの修正
このせいで、CPU負荷の高い環境において、他のユーザーが実行している PHP-FPM の child に差し替わるなどの不具合が発生しているようです。
Significant reduction in performance when running phpunit after upgrade from 8.1.9 to 8.1.10 · Issue #9993 · php/php-src
PHP 8.1.10 以降で、PHPUnit の実行速度がめちゃくちゃ遅くなってるんですが!?というお便り。
PHP 8.1.7: Time: 05:13.226, Memory: 829.00 MB
PHP 8.1.9: Time: 05:23.756, Memory: 831.00 MB
PHP 8.1.10: Time: 12:25.195, Memory: 773.00 MB
PHP 8.1.12: Time: 11:59.423, Memory: 773.00 MB
Significant って、どれくらいっておもったら、倍以上じゃん!ってわけです。
Xdebug turned off と書いてあるので、誤って Xdebug 使ってたみたいな話ではないようです。メモリ使用量は若干下がっているというのもポイントかもしれません。
空間計算量を犠牲にして成り立っていた何かが、改善された結果かも。
憶測で語ってもしょうがないので、続報を待ちましょう。
Segmentation Fault during OPCache Preload in PHP 8.1+ · Issue #9968 · php/php-src
link されていないクラスの定数利用が含まれる場合に preload が SegV を発生させるというバグ
早々に Fix されました。
link されていないというのは、autoload には含まれていないということらしく。イシューを上げてきた人のソフトウェアにおいてはデザインとして、そのような構造になっているそうです。
Discussion