今週の PHP 2022/10/08 〜 2022/10/14
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
PHP: rfc:deprecations_php_8_3
インターナルで議論されている非推奨系の話は、ここにマッシュアップされるようです。
この RFC が作成されていたことを気づいてなかった。Core Roundup のおかげで気づけました。
mt_rand
が非推奨になる!
Preventing stack overflows - Externals
大垣さんからの投稿は
Fatal エラーが発生した場合、PHP はスタックdumpを許可してない。大昔の PHP は E_ERROR をユーザー定義のエラーハンドラーでキャッチ出来たが、自分で自分の足を打つようなものだから、現在では無効化されている。
Fatal エラーだと、エラー発生箇所程度は分かるけど、スタックdump というのはスタックトレーズ全体としては出せないということなのかな??
これに対して、投稿主は Fatal エラー自体にも問題はあるが、今回自分が提案している方法なら、無限ループがメモリ不足を起こす前に、スタックサイズの制限で検知できるよ。と
だんだん、この話、「良さそうだな?」と感じられてきた。
[VOTE] Improve unserialize() error handling - Externals
Timさんが作業してきた件ですが、VOTE 開始です。
小さく別れた3つの提案に対しての投票で、今のところは可決されそうな雰囲気があります。
unserialize 周りは、関連の挙動も含めて、あまり統一感がない状況なので、このRFCは、ぜひ可決されてほしい。
この RFC の内容については、別途詳細に読み込んで解説したいと思います。
RFC [Discussion]: Randomizer Additions - Externals
ext-Random へのメソッド追加ですが、PoC を経由しつつ、RFC が作成されました。
下記の3メソッドが追加予定です。
final class Randomizer {
// […]
public function getBytesFromAlphabet(string $alphabet, int $length): string {}
public function nextFloat(): float {}
public function getFloat(float $min, float $max): float {}
}
Feature preview (formely was: experimental features) - Externals
先週までは実験的機能という名前で議論されていたものですが、フィーチャープレビューという名前になって再登場。
対話が再開されています。
今の所、否定的な意見が多いのですが、どういう流れになっていくのか見守りたいです。
Sanitize filters - Externals
フィルター、サニタイズという言葉の紛らわしさや、PHPにおけるコンテキストなどが語らており、ちょっと小さくまとめるのが難しいです。
非常に面白い話なので、こちらも別途とりあげたい。
RFC json_validate Accepted - Externals
わーい、可決!
Bugs
PHP :: Bug #51056 :: fread() on blocking stream will block even if data is available
かなり古いイシューですが、修正が入っています。
修正内容を見てみると、バッファされた読み込みデータある場合は、ブロッキングを解除しましょうねということらしい。
pg_field_type first call is very slow · Issue #9692 · php/php-src
ちょっと興味があったのでウォッチしていたイシュー。pg_field_type の最初のコールだけやけに遅いという指摘。
遅いという議論のなかで、きちんと計測データが載っていたりして、わかりやすかった。
遅くなっている理由は、pg_field_type の最初のコールで、DBサーバーに型の情報を取得しにいって、以後はキャッシュを使うという仕組みらしいので、まあしょうがないなという感じ。
RFC - json_validate() by juan-morales · Pull Request #9399 · php/php-src
PHP 8.3 に取り込まれた最初のフィーチャーです! おめでとうございます。
[Question]About superglobal $_GET and urldecode() · Issue #9694 · php/php-src
ドキュメントによると、$_GET
は自動で urldecode されているらしいけど、ソースどこ?という質問
php_auto_globals_create_get
だよという優しい回答。
DateTimeImmutable::diff
differences in 8.1.10 onwards - timezone related. · Issue #9699 · php/php-src
Timezone をまたいだ 日付の diff が8.1.10以降で変わってしまっているというイシュー。
めちゃくちゃ変わってるじゃん。
これは影響が大きそうです。
DateTime::createFromFormat with two identical timezones resolves to false · Issue #9700 · php/php-src
さっきの不具合とは別で、タイムゾーン入りの日付フォーマットが解釈されないというイシュー。
ドキュメントにおける日付フォーマットがおかしいという側面と、パーサーが中括弧の取り扱いに失敗しているという側面がありそう。
Problem when ISO-2022-JP-MS is specified in mb_encode_mimeheader · Issue #9683 · php/php-src
EC-CUBE派生のバグチケットですが、マージされたようです。
いやー、しかし、マイナーバージョンで壊れるのは厳しい。
A override for a trait methods. · Issue #9702 · php/php-src
Trait のオーバーライドができたら嬉しくない?っていうイシュー
Trait は継承ではない。ということで終了しそう。
ダミアンさんの提案として、下記のように別名を付けてラップしてあげれば出来るよというコード例
疑似デコレーターパターンみたいな感じですね。
Deprecate SplFixedArray::__wakeup() by TysonAndre · Pull Request #9704 · php/php-src
どうも、 unserialize にかかわ自動実行の関数群については、脇が甘くなっているようです。
PHP 8.3 に対しては、unserialize の挙動改善の RFC が出ているので、改善されていくのを期待。
phpdbg memory leaks by option "-h" · Issue #9710 · php/php-src
phpdbg を -h
オプションつけて実行するとメモリーリークしてクラッシュするという案件
関連イシューも上がってきており、にわかに活気づいています。
Allowing use throw many times · Issue #9715 · php/php-src
throw いっぱい書けちゃうじゃん!というイシュー
throw は 8.0 以降は式なので、これは正しい挙動
Fiber: add shadow stack support by chen-hu-97 · Pull Request #9283 · php/php-src
Fiber 関連の議論になると必ず出てくる https://github.com/boostorg/context
いつか、理解できるようになるぞ!
(つまり、shadow stack については、まったくよくわからない)
PDO_MySQL does not support cursors · Issue #1883 · php/doc-en
MySQL はスクロールカーサーをサポートしてないので、ドキュメントイシュー送り。
ところで、スクロールカーサーとは何なんだろう??
Too big integer token should produce a warning · Issue #9734 · php/php-src
でかすぎる int はワーニングを出すべきでは?というイシュー
現状では、ひっそりと float に変換されます。過去には Big int という RFC もあったもよう。
関連の話も上がってきており、にわかに int オーバーフローが騒がしい
Add intadd
function by adsr · Pull Request #9742 · php/php-src https://github.com/php/php-src/pull/9742#issuecomment-1278895481
Fiber stack variables do not participate in cycle collector · Issue #9735 · php/php-src
今の俺には理解できないが Fiber のイシュー。
Microseconds to error log · Issue #9745 · php/php-src
負荷の高いサービスを運営しているので、ログにマイクロ秒を入れたいんだがというイシュー。
現状では、スタンダードな方法が確立されておらず、どうするのが良いかな?という相談
実に良いイシューで、この先、順調に議論が重ねられるといいなと思う。要チェックです。
Symfony preloading fails on PHP-8.2 with JIT · Issue #9746 · php/php-src
原因とかは判明していませんが、 PHP-8.2系で、Symfony の preloading が失敗するとのこと。
使っている方は注意。
Generator memory leak when interrupted while the generator is on the stack · Issue #9750 · php/php-src
Generator の停止状態で割り込みを入れるとメモリーリークするというイシュー。多分、ほとんどの開発者には関係がなさそう。
修正はこちら
extra_named_params
の初期化がされていなかったということらしい。
余談
PHP Core Roundup #6 — The PHP Foundation — Supporting, Advancing, and Developing the PHP Language
PHP Foundation から Core Roundup の第6弾のポストが投稿されました。かんたんにラップアップしますと
- PHP Parser が 8.2 に対応
- PHP 8.3 向けの議論が早くも始まっている件
- 8.3 向けの非推奨の議論
- json_validate 採択
- 最近マージされた PR
今週のPHP を見続けている方には、あまり目新しいニュースはないかもしれませんが、非常によくまとまっていていつも助かります。
Discussion