📑

今週の PHP 2023-04-15 〜 2023-04-21

2023/06/29に公開

PHP のメーリングリストから、気になった情報をピックアップします。

Internal

Windows PECL build machine died - Externals

この件については、Githubのイシュー内で話されてた方向になるのかなと思います。

https://github.com/cmb69/setup-php-sdk

つまり、PECL側ではなく、拡張側が自分たちでビルドして提供してねという話です。ビルド環境の一貫性とかの話が当初は問題になっていたような気がしますが、プラットフォーム側のコミュニティが善意で維持し続けるのは厳しいですね。

Expansion of PHP Symbols? - Externals

型エイリアスがほしいという話、関数のオートロードの話、そして列挙型に対して、1ファイルではなくそれぞれの列挙型に対してファイルを作成しなきゃならないことなど、現在のPHPが抱えているある種の一般性に対して疑問を投げかける投稿です。

特に、型エイリアスについて議論は盛り上がっていました。実際に内部の挙動を考えてみると、いつの時点でエイリアスが有効になるのかとか、エイリアスが競合したらとか、考えることが多いです。

1クラス、1ファイルなのは、PSR-0, PSR-4 のせいだよねとか、当たり前になっていることに対してちょっと気付かされるようにお便りでした。

[VOTE] PHP 8.3 Release Managers - Externals

ルーキーのリリースマネージャーさんが2名選出されていました。おめでとうございます。そして、ありがとうございます。

self-hosting (compiling context) PHP - Externals

PHPをコンパイルするPHPって、どっかにやったことある人いるのかな?という質問。

Pythonでは、pypy ですね!

PHPには、PHPPHP があるそうです!実装は10年前ですね。楽しそうなので、コンパイラの勉強がてら、自分もチャレンジしてみたいな。

ircmaxell/PHPPHP: A PHP VM implementation in PHP

Future stability of PHP? - Externals

俺の作った最強のPHPが 7.1 から 8.2 に移行したら、めちゃくちゃ非推奨と致命的エラーが出たんだが..... というお便り。

つまり、下位互換性について、5年 10年 20年というスパンで見ていくと、つらいよという。ようするに、古いコードがそのまま動くように維持してくれないかね?という話

この議論は、可燃性が高そうだなと思いましたが、たくさんレスがついています。モダンなプラクティスが使えるように進化しろよ!という方向性と、今までのものがそのまま動くように維持しろよ!という

  • 今ならTypescriptを選ぶさ
  • いや、成熟度ならPHPだ
  • 互換性より、お前のコードの問題だ
  • .....

などなど、様々な意見が出ています。興味のある方はぜひ。

Bugs

PECL website does not offer Windows DLLs anymore · Issue #10850 · php/php-src

Microsoft が PECL のための Windows Build System の提供を止めたため、PECLのウェブサイト上からDLLのダウンロードができなくなっているというイシュー。

PECL側に頼るのではなく、それぞれの拡張側がそれぞれのCI上でDLLをビルドするように変更してねという方向のようです。

そのためのやり方は、cmb69 さんがまとめてくれています。

https://github.com/cmb69/setup-php-sdk

filter_var FILTER_VALIDATE_IP with ip '0.2.3.4' will return true · Issue #11098 · php/php-src

FILTER_VALIDATE_IP で先頭が0のIPアドレスがtrueと判断されるのはおかしいというイシュー。
0.0.0.0/8 つまり、0.0.0.0 から 0.0.0.255 は予約されている特別なIPアドレスです。だからといって、不正なのかなぁというのが焦点。

FILTER_VALIDATE_IP にはすでにそのような要件を満たすフラグが存在詞ていて

FILTER_FLAG_NO_PRIV_RANG FILTER_FLAG_NO_RES_RANGE を使えば、ちゃんとはじけるとのこと。勉強になる。

ちなみに、2つのフラグ条件を兼ねる FILTER_FLAG_GLOBAL_RANGE もあるそうです。

ドキュメントはこちら -> https://www.php.net/manual/en/filter.filters.flags.php

Use zval storage for php://memory stream · Issue #11106 · php/php-src

php://memory php://temp は、streamを使った入出力処理になるため、copy-on-write が使われておらず、メモリ使用量が2倍になってしまう。zval storage を使うことで copy-on-write に対応しようよというイシュー

良さそうですが、動きはなさそう。

Segfault when compiling code on the request shutdown after a fatal error · Issue #11108 · php/php-src

register_shutdown_function 内で、PHPファイルの include を行ってコンパイルを走らせると、SegFault が発生するというイシュー

グローバル変数の状態がおかしくなっていることが原因だったようです。修正済み。

Discussion