今週の PHP 2022/09/17 〜 2022/09/23
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
Specify abstract parent methods for traits
Trait って、利用する側のクラスの関数を呼び出せるけど、あんまり良いプラクティスじゃないよね?という話題
サンプルを書いてみましたが、空中合体しているようなソースコードになりまして、不安を感じますね。
いや、でもそれって、abstract メソッドを定義すれば良くないと思ったのだが...
この話題を投稿した人は、 #[Override]
というアトリビュートを作って、実装を強制仕様ということらしいが、abstract メソッドでも強制させられると思うが...
今の所、投稿者の真意がわかりかねています。
make install overwriting php.ini
make install
すると /usr/local/lib/php.ini
を上書きされてしまう。困るよ!というご相談。
そうだったっけ?
訓練された PHPer であれば、バージョンによって ini ファイルの場所を変える(コンパイルオプション)、もしくはバックアップを取っておくなどは常識的にやりそうです。
リリースマネージャーさんから、「make install が ユーザーランドの php.ini を上書きすることはない」という返信が来ています。
詳細を教えて下さいという流れ。
Error behaviour for max_input_vars
先週から引き続き、 max_input_vars
についての議論。
[VOTE] json_validate
json文字列をチェックする関数の RFC です。
議論も収束してきたため、RFC の細かい調整行われて投票が開始されました。
Timさんが、RFC 主を優しくサポートしており、実にいい人だなと思った。
事前のコミュニケーションが活発だった上に、RFC主の返信もスムーズだったため、Yes が優勢です。これは入りそう。
PHP: rfc:glob_streamwrapper_support
Support するプロトコルは何にするか?などについて、今週も議論が行われています。
全然使ったこと無いせいで、ピンときてませんが scandir などで ftp のプロトコルに対して glob かけたい!みたいなユースケースがあるようです。
Issues with readonly classes
今週も活発に議論が行われています。
Readonlyクラスに可変のプロパティを簡単に生やせるとしたら、そもそも RFC 通ってないと思うよ?というもっともな意見。
Readonly の RFC 作者の意見としては、通常のWebサービスにおける Value オブジェクトとしてイミュータブルなインスタンスを提供したいという素朴な要求に特化したとのこと。
拡張性の提案として clone 時の挙動に関する追加の RFC を出す予定とのこと。
なんとなく、この議論の落ち着き先が決まってきたような気がします。
このイシューを立てた人は、現状の Readonly は完全にぶっ壊れているという主張を展開しているので、ちょっと大丈夫だろうかという感じも。
Tim さんによるナイスなラップアップとしては
- 現状はデザインされた通りに動いている。(壊れてはいない)
- 今時点で 8.2 の Readonly の挙動変更は受け入れられない。
- Timさん個人の考えとしては、継承ツリーからは Readonly の概念が消えたほうが良いというものでした。
RFC [Discussion]: Improve unserialize() error handling
今週も RFC の細かい内容について議論が続いています。
Symfony のユーザー側のコードベースを参考にしつつ話がされています。(時間がなさすぎて、全部は読めなかった....
Set SA_ONSTACK in zend_sigaction External
Go製の新しいSAPIを作っているかたからのお便り。
SA_ONSTACK を使ったシグナルを扱えるようにする PR 出したけど、これ RFC 必要?という話
変更は実に軽微です。軽微だからと言っても、意味が分かるわけではないがな!
Master 向けにマージされるようです。
Bugs
parse_url bug in PHP8.2.0-rc1 · Issue #9565 · php/php-src
parse_url の不具合ですが、バグ混入のコミットがリバートされて一件落着。
Fibers appear to be broken on FreeBSD i386 · Issue #9566 · php/php-src
タイトルの通りです。Fiberをstartさせただけで segV が出ています。
すでに修正 commit が出されています。 fiber_asm を使わないという設定になります。(なんのこっちゃ?)
The behavior of mb_strcut in mbstring has been changed in PHP8.1 · Issue #9535 · php/php-src
mb_strcut の不具合修正です。今週は修正コミットが出ています。
mb_convert_encoding "" (backslash) and "~" (tilde) BC breaks to Shift_JIS-2004 · Issue #9528 · php/php-src
てきめんさん報告の convert 不具合ですが、適切なコミュニケーションが行われたのち、修正の方向に向かってます。
declare random globals by remicollet · Pull Request #9576 · php/php-src
なるほど、こうやって、他の ext からの利用可否を判断してるのかというPR
session_create_id() fails with user defined save handler that doesn't have a validateId() method · Issue #9583 · php/php-src
session_create_id
が失敗するというイシューです。
ユーザー定義の Session ハンドラーを利用する場合なので、我々は無関係?なーんてことはなく
主要な WAF は SessionHandlerInterface を拡張している場合が多いので、もしかしたらどこかに大きい影響が出ているかもしれません。
まだ、特に進展がないですが、注視したいイシュー。
preg_match causes Conditional jump or move depends on uninitialised value(s) issue · Issue #9571 · php/php-src
PCRE を valgrind を使ってデバッグしている方のイシュー
PCRE を valgrind support 付きでビルドしないと駄目よいうアドバイスのあと、自己解決されてクローズされてしまった....
Replace php_reallocarray with safe_perealloc · Issue #9581 · php/php-src
完全には理解できてないけど、様々な環境下でコンパイル可能にするための関数に差し替えたということらしい。
修正コミットは下記で。reallocarray
-> safe_peraalloc
になっている。
compileタイムの問題なので、ほとんどの人は多分無関係。
Fix #78405: FPM with keepalive kills workers after $terminate_timeout by SjonHortensius · Pull Request #8163 · php/php-src
keepalive を有効にした FPM において、処理待ちのプロセスがkillされてしまうのを防ぎましょうというPR
修正コミットは来ているが、テストが足されていないので放ったらかしになっています。
今週はPR立てた主が、自動クローズされそうになったので
「なんか参考になるテストあったら教えてね」というコメントでした。
(3月頃のPR)
有用な修正だと思うので、なんとか入ってほしい。
Use external diff tool if DIFF_CMD env var is set by derickr · Pull Request #9553 · php/php-src
DIFF_CMD
という環境変数を追加することで、外部の diff コマンドでPHP本体のテスト結果をチェックできるようにしたいという PR
よいことだ。ということで、マージされています。
テストランナーは PHP で書かれているので、修正点がわかりやすい。
Added fallthrough for == operator with objects for extensions by JordanRL · Pull Request #7973 · php/php-src
1月頃に来ていた PR
==
で比較されるときの内部的な関数を拡張側で指定できるようにするというもの。
機能追加だから、RFC 必要なのではと思ったけど、PHP自体の機能性ではなく、拡張製作者用の機能追加だから RFC が不要らしい。
そうなのか?と思いつつ見ている。
Add support for binary, and octal number prefixes for INI settings by Girgias · Pull Request #9560 · php/php-src
タイトル通りの内容のPR。
base の判定をしています。
A core dump (SIGSEGV) occurs when dl() is used · Issue #9589 · php/php-src
8.2RC1 で dl
使って、読み込み済みの共有ライブラリを読み込むと SegV が起きるというイシュー。
これ、8.1系で修正が入っていたやつだと思うので、バックポートされてないのかな???
Float handling changes since 8.0 - on purpose? · Issue #9587 · php/php-src
一瞬、IEEE754案件かと思いましたが、var_dump
の仕様変更だったようです。
7.4 では float(548.66)
と小数点第二位で精度が止まっています。
8系における互換性のない変更にかかれています。
var_dump() and debug_zval_dump() will now print floating-point numbers using serialize_precision rather than precision. In a default configuration, this means that floating-point numbers are now printed with full accuracy by these debugging functions.
8系からは、 serialize_precision
に従った精度で出力されます。
デフォルト設定では precision
= 14
, serialize_precision=-1
になっているようです。
ini_set
を使うことで、デバッグ出力時の挙動は合致させることが可能ですが、serialize したときの挙動が変わるので止めたほうがいいです。
要するに 8系の変更は、var_dump
の内容を serialize 時の内容と合わせることで、認知のズレを無くしているという感じだと思います。
Randomizer::getBytes()
by joshuaruesweg · Pull Request #9563 · php/php-src
Remove superfluous helper variable in
ext-Random の細かいコード修正。余分な変数の削除です。
こういう PR でも良いんだなぁ。素晴らしいなぁと思った。
Major overhaul of mbstring (part 26) by alexdowad · Pull Request #9592 · php/php-src
オーバーホールの名のもとに、mbstring にガシガシ変更が加わっているぜ!
caseコンバージョンのチューニングだったようです。
これは、マルチバイト文字列圏の人々は、もっと注視していかないといけないですね。
Indirect call reduction for Jit code by wxue1 · Pull Request #9579 · php/php-src
どういうことなのか分からんが、1%の速度向上らしいぜ
fgetcsv does not read the file correctly · Issue #9600 · php/php-src
中国語のCSVファイルに対して、fgetcsv
が正常動作しないというイシュー
手元でも試したけど、正常に動いているようにみえる。とりあえず CRLF も試したけど同じ。
Windows + PHP 7.4 でのみ発生しているらしい。再現環境がない....
Discussion