今週の PHP 2022/07/16 〜 2022/07/22
PHP のメーリングリストから、気になった情報をピックアップします。
PHP 8.2 をターゲットにした RFC の投票結果発表が相次ぎました。
Internal
Accepted
PHP: rfc:constants_in_traits
五十嵐さんからは、最後のひと押し。「投票はともかく、せっかくだから実装は見てね!!」
最終的に 70% の賛成票にて Accepted。
PHP: rfc:iterator_xyz_accept_array
Accepted めでたい。
iterator_to_array
, iterator_count
は引数にすべての iterable を受け取ることができるようになります!
Declined
PHP: rfc:json_encode_indentation
Json indent 用のパラメーター導入ですが、否決されました。
PHP: rfc:curl-url-api
こちらも否決。少しコミュニケーションが足りなかった感じでした。必要性については否定されていなかったので、再チャレンジして欲しい。
Feature Freeze
8.2 向けの フィーチャーフリーズについてです。PHP のリリースプロセスについては、下記のマークダウンにかかれている。
ドキュメントのリリースプロセスの記述がおかしいねなどのやりとりがありましたが、無事にフィーチャーフリーズ。
PHP 8.2 に入り込むフィーチャーは、以下の milestone から確認出来ます。
PSA: Wiki's voting doodle supports autoclosing at a given point in time
RFC の Vote は本来クローズされるべき時間よりも延長してクローズされることが多い。なぜなら手動でやってるから。
じつは、closeon というアトリビュートを設定すると、指定時間にクローズ出来るらしい。
なので、サンプルを更新しておいたよ!というお話。
ちゃんとタイムゾーンも指定できますね!
個人的にも少し気になっていた件ですし、タイムゾーンの関係で海外に配慮した時間で vote 開始した場合、閉じるの大変だなと思っていたのでこれは良い話。
Random Extension
すでに、Random 拡張のソースコードが 8.2 にマージされているのですが、RC 版を使った方から早速イシューが上がってきています。
そして、こちらが修正の PR
Thread Safe 対応についての指摘も
これに対しては cmb さんからの PR で修正が入っている
これがコミュニティの力か!(なお、全然意味が分からない!)
もう一件、こちらは __construct
を実在するオブジェクトに対して後からコールするとメモリーリークしているという件。
そんなに頑張りすぎるなよ!という心温まるリプライ、かつ実際のプログラムではまあ起きないだろうというケース。
8.2.0 Beta1
ベータリリースです。 Random 拡張も試せますね!
Bugs
do not silently truncate the key in openssl_encrypt() · Issue #9026 · php/php-src
null 文字で許容される最大文字数以上にセットしても、暗黙のうちに key が truncate されているというイシュー
null 文字は C側では終端文字扱いだから、これはそうなのでは?と思ったがどうなのだろう。
Array numeric string key gets converted to int · Issue #9029 · php/php-src
不具合ではなく仕様だったイシュー。
Strings containing valid decimal ints, unless the number is preceded by a + sign, will be cast to the int type. E.g. the key "8" will actually be stored under 8. On the other hand "08" will not be cast, as it isn't a valid decimal integer.
日本語マニュアル
10 進数の int として妥当な形式の String は、 数値の前に + 記号がついていない限り、 int 型にキャストされます。 つまり、キーに "8" を指定すると、実際には 8 として格納されるということです。一方 "08" はキャストされません。これは十進数として妥当な形式ではないからです。
というわけで、数字として妥当な形式の string は int 型にキャストされます。ご注意を。
Performance regression when unpacking a generator yielding objects · Issue #9030 · php/php-src
実に面白そうなイシュー
不具合の導入がこれだというのだけど、なぜだろう?
change log を見ると 8.1.0 で入っているので、8.1系は駄目っぽい
手元のマシンで計測してみたところ
8.1系 270msec 程度
8.0系 160msec 程度
倍とはいかないまでも、速度劣化が出ている。
ATTACH
is crashing php when the filename is bind /w open_basedir
set · Issue #9032 · php/php-src
Sqlite
open_basedir
がセットされた環境で、Sqlite の ATTACH を行うと PHP がクラッシュするというイシュー
file 名に NULL が渡ってくるというケース漏れでした。 open_basedir
はディレクトリトラバーサル攻撃などを防ぐために有効な設定ですが、Sqlite はその設定がされているパターンが実装されていなかったということのようです。
Segfault with JIT and large match/switch statements · Issue #8030 · php/php-src
ARM で、match/swith 文が JIT コンパイル時にセグフォを起こすというイシュー
修正されてるけど、まじでわからん
NumberFormatter currency format mismatch on Windows and Linux · Issue #9034 · php/php-src
ICU が ICU-DATA-FULL を分割した影響を受けたイシューがまた出た。
こっちで、根本から治らない限りいつまでも続く。
mb_detect_encoding(): wrong results with null $encodings · Issue #9008 · php/php-src
PHP 8.1 で混入
mb_detect_encoding が null $encodings で誤った結果を返すというもの
Fix GH-9008: mb_detect_encoding(): wrong results with null $encodings · php/php-src@c2bdaa4 https://github.com/php/php-src/commit/c2bdaa48e17a56f0d8e61728ecb30915f0db857b
encoding 周りは他のイシューも出ている。
The order of $encodings
parameter in mb_detect_encoding()
is sometimes ignored · Issue #1708 · php/doc-en https://github.com/php/doc-en/issues/1708
8.1系のこの辺は、もう少し深く調べておく必要があるかもしれない。
Discussion