LoginSignup
3
2

PHP ぼやき日記 2024-05-15

Posted at

不定期に誰に向けるでもなく PHP に関する雑な殴り書きをしている。気がつけばもう 5 月、そうか、もう 5 月だったか……。

krakjoe の旦那の生存を確認した

Property Hooks の提案が通ってた

  • https://wiki.php.net/rfc/property-hooks
  • 投票はじまってみれば圧勝だった
  • PHP 8.4 からはプロパティアクセッサが使えて↓みたいなコードが合法になるし interface にプロパティが生やせる
class Foo
{
    public string $bar;
 
    public string $baz {
        get => $this->baz;
        set => strtoupper($value);
    }
}
  • hooks の地味にむずいところは readonly 付けたプロパティへ子で hooks 付けたりはできないところ
  • まあ大抵の場合継承なんか使わないほうがいいけど
  • 今のところ Assymmetric Visibility は含まれてないので、他言語の類似機能を見てる人的には超微妙な物足りなさを感じるかもしれない

武田さんが pg_result_memory_size を追加してた

  • https://github.com/php/php-src/pull/14214
  • pg_ 系のクエリ結果用リソースの消費メモリ量を教えてくれるやつ
  • 高町さんとの会話からすると PDO 側にも入れる気があるもよう
    • https://twitter.com/KentarouTakeda/status/1790168364679385561
    • なお高町さんは PHP 8.4 の RM の 1 人で PHP Foundation の雇うコア開発者の 1 人で歌手で声優でこないだ AMPHP のチャットで「複数人が 1 つの名で活動しているのでは?」と疑われていた人

俺の PHP プロファイラの近況

  • コアダンプの読み取り機能を実装した
    • https://github.com/reliforp/reli-prof/pull/432
    • https://speakerdeck.com/sji/php-dedu-mule-siikoadanpu
    • kubectl debug で k8s クラスタ上で稼働中の pod にアタッチして gcore でプロセス生かしたままコアダンプとって kubectl cp でダウンロードしたやつを解析、みたいなワークフローが個人的には死ぬほど便利
    • もはやこれなしに long running な PHP プロセスとどう付き合っていけばよいのか分からないくらいには役立っている
    • いまの master のコード微妙にバグってるので余裕出たら直したい(手元では修正した版を使っている)
  • strip された ZTS バイナリでもブルートフォースで _tsrm_ls_cache をとるコードの PoC が動いた
    • https://github.com/reliforp/reli-prof/pull/451
    • ZTS 環境で各スレッドの EG のアドレスを解決するには TLS シンボル _tsrm_ls_cache のアドレスを解決する必要があり、これは公開シンボルではないため、strip された ZTS バイナリはこれまで Reli で対応してなかった
    • docker 公式の ZTS 版とか frankenphp とかでは strip されたバイナリが使われてる
    • strip されてても使えると便利だけど無理だよなー、と思いながら処理系バイナリのプログラムヘッダを漫然と眺めていたら、TLS ブロックが全体で 0x13c バイトとかしかないのに気づいた
    • それで「これしかないなら 8 バイトずつズラしてブルートフォースで _tsrm_ls_cache と仮定して試しに EG 解決して良い感じに情報取れるか試すだけでシンボル解決しないで見つかるじゃん!しかも一度見つけたらそのバイナリについてはファイルキャッシュできるじゃん!」まで思いついた
    • もはやプロファイラを作っているのかマルウェアを作っているのか分からないが、PoC を実装すると実際に動くので、次のバージョン(0.12.0)に入れたい
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2