今週の PHP 2022/10/01 〜 2022/10/07
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
mb_trim の件
RFC 出そうとしている人のメールが、どうしても Internals に届かないということで、まだ進んでない。
メール届いた?
届いてないよ
みたいなやり取りがされている。
int|float
- Externals
Alias for
number
っていう便利な型が欲しくない?という話
さらに、こんな感じで複合型を use 文で定義できるようにしようぜという。
use int|float as numeric;
この手の Type Alias に関する議論は、なんどもされているそうで、基地の問題として
Alias が定義される場所と、それが評価される場所に関して、いくつかの問題があるよと。
例えば、A, B というインタフェースでそれぞれ同名の alias が使われたら、それを実装した C クラスではどっちが評価されるの?とか
このメールを送ってきた人は、既存の議論をすべてチェックした上で、新しく RFC を書くよ!という話でしたので、RFC を楽しみに待ちましょう。
Union type casts - Externals
こんなアイデアです。
$foo = (int|float)$bar;
どちらの型に Cast されるのかイマイチ明確でないのがアレだなという気がします。
上の Type Alias の話にもちょっと似ているなと思います。複合型をフィルターとして使うのとは意味が違うなぁ。
Sanitize filters - Externals
PHP の FILTER_SANITIZE_****
についてのご相談。
たくさん存在するのですが、それぞれ動作に一貫性が無いということで、メール内で指摘を列挙されています。
まあ、わかりにくいし、つらみが多いよねという意見が多数。
いや、FILTER API はそもそも、大体おかしいという意見も出てきて、盛り上がっています。
藪をつついたこの議論は、一体どこに向かうのか?
Experimental features - Externals
RFC プロセスは、ちょっと時間がかかる。バージョンが上がるまで機能を追加できない。
だから、実験的機能というのを PHP に作ったらどうか?という提案
以前、話し合われていたらしい https://github.com/PHPGenerics/php-generics-rfc/issues/49
いや、それは 拡張でやればよくないか?などと、たくさんの議論がされています。
Preventing stack overflows - Externals
Stack Overflow を防ぐアイデアを提案するよというお便り
StackOverflowが発生する前に Exception をスローすることで、検知可能にするというもの。
Stackサイズは環境依存なので、言語側で環境ごとに適切なサイズを取得して、検知できるようにするというアイデアです。
Bugs
segmentation fault when sending SIGINT to PHP embedded in another program · Issue #9649 · php/php-src
Go で PHP を embed してる人の相談。Go 側で SIGINT が出ると、PHP側が SegV 出すというもの。
さらと、これの再現が取れる gist をコミッターの人が投稿していてさすが過ぎた
一つの手として、ZEND_SIGNAL 無効化すると良いらしい。
もしかしたら、将来この方向でなにかやるかもしれないので、チェックしておいた。
Fix #77726: Allow null character in regex patterns by tobil4sk · Pull Request #8114 · php/php-src
正規表現で Null が使えるようになるという対応
8.2.0 RC2 の NEWS に入っていたので、いちおう取り上げた。
わかったようなわからないようななので、今度試してみよう。
String corruption on deployments with php-fpm 8.1.6 · Issue #8739 · php/php-src
数ヶ月前に報告されていたイシュー
負荷の高いアプリケーションで、稀に include に失敗するというイシュー
再現性が無いということで、報告主も途方にくれているというやつ。
include(/space/www/api2019/data/releases/20220607140425/vendor/la�R�F): Failed to open stream: No such file or directory
こんな感じで、対象ファイルの文字列がおかしくなっているらしい。
8.1.10 にすると、直ったらしい。
Mysqli converts TINYINT to a string after SUM() if the result of SUM is outside TINYINT, even if MYSQLI_OPT_INT_AND_FLOAT_NATIVE is set to true. · Issue #9665 · php/php-src
Mysqli を使った場合に TINYINT のカラムに対する SUM が TINYINT のサイズを超えると、文字列として扱われるという報告
そもそも、集計しているので、TINYINT 関係ないじゃんという気がしますが、こういうことになっているらしい。
CAST(SUM(num) AS UNSIGNED)
こういうワークアラウンドが存在するようです。
通常はみなさんPDO使うと思いますが、ちょっとしたツールとかで mysqli をサラッと使うことはあるかもしれません。
implode() refers to wrong parameter name · Issue #9667 · php/php-src
非常に趣のあるイシュー
implode
の第二引数が null
の場合、implode
が代替 signature だと誤解されて、エラーメッセージがよく分からんことになるという。
implode(): Argument #1 ($pieces) must be of type array, string given
mb_strpos matches illegal character when needle is '?' · Issue #9613 · php/php-src
mb_strpos
, mb_stripos
の挙動不審について
やはり、現状の挙動はよろしくないということで、ドキュメントの修正と、一定の移行期間を使っての挙動修正を行おうということになりそう。
Restore backwards-compatible mappings of U+005C and U+007E to SJIS-2004 by alexdowad · Pull Request #9666 · php/php-src
てきめんさん報告のイシュー。PRでましたね。
ファイル差分を見ると、泥臭さが理解できます。
Session ID changing with custom session handler in PHP 8.2.0RC3 · Issue #9668 · php/php-src
validateId メソッドを持たない場合に、カスタムセッションハンドラーの session_create_id
が失敗するというもの
多分、以前出ていた https://github.com/php/php-src/issues/9583 と同じやつ
修正PRは出ています。
The help document of php misses two options · Issue #9670 · php/php-src
php -h
に C
q
オプションのことが出力されないという話。
マニュアル側には乗っている。でも、CGI用のオプションだから、CLIのAPIからは削除しても良い?みたいな話になっている。
$length argument for fpassthru · Issue #9673 · php/php-src
HTTP range requests の実装をしている人からのお便り
readfile や、fpassthru は オフセットや長さを指定する引数がない。
fread でループするのは苦痛だ。 なんか教えてくれ!
stream_copy_to_stream
という関数があるよ!というお答え。
何でもあるね PHP
Major overhaul of mbstring (part 26) by alexdowad · Pull Request #9592 · php/php-src
master にマージされました。
Randomizer::getBytesFromAlphabet()
method by joshuaruesweg · Pull Request #9664 · php/php-src
Add
Randomizer
に新しいメソッドを追加するというPR
RFC プロセスが必要なのかな?それとも、8.2にインクルードされるのかな??
と思ったら、RFC プロセスへ向かうようです。
Add support for cloning readonly properties by kocsismate · Pull Request #9497 · php/php-src
インターナルで議論されている Readonly の制限について、クローン時には緩和するという趣旨の対応
RFC ラベルがついているので、今後 RFC プロセスを経ることになります。
Problem when ISO-2022-JP-MS is specified in mb_ encode_mimeheader · Issue #9683 · php/php-src
ポロポロと出てくる ISO-2022-JP-MS 系不具合
Function array return type · Issue #9486 · php/php-src
Array Type の 提案イシュー。このまま RFC プロセスへご案内
こんなやつね。現在の ArrayShapes でサポートされているような記法を言語側でサポートしようというもの。
注) 一ヶ月前のイシューでした。新しいコメントが入っていたので、今週のイシューと勘違いして拾ってます。
public function foo(): array<int, Role>
{
...
}
The behavior of mb_strcut in mbstring has been changed in PHP8.1 · Issue #9535 · php/php-src
mbstring 関連は、いろんな関連があって、全容把握できていない。
もうちょっと、方向性がはっきりしてきたらまとめてみたい。
Discussion