Slide 1

Slide 1 text

PHP Internals わいわい

Slide 2

Slide 2 text

自己紹介 てきめん ● https://tekitoh-memdhoi.info ● X: @youkidearitai ● https://github.com/youkidearit ai ● PHP 8.4で複数の関数を作りました – mb_trim, mb_ltrim, mb_rtrim – mb_ucfirst, mb_lcfirst – grapheme_str_split オレ

Slide 3

Slide 3 text

趣旨 ● PHP Internals Bookを元に、PHPのソースコード、php-srcを取得、コンパ イルしたりソースコードを読みます – https://www.phpinternalsbook.com/ – あわよくばバグを見つけたら報告したり – あわよくばテストコードを修正したり – 更に行けば関数・機能を追加するとか ● PHP Internalに向かって新機能を追加する提案をしたりできないかと思っ ています

Slide 4

Slide 4 text

コンパイルの前段階 ● Linuxを用意します ● 今回はDockerを使います – WSLやmultipass、limaなどを使ってもらっても構いま せん

Slide 5

Slide 5 text

PHPのコンパイルの準備 > docker pull ubuntu:22.04 > docker run -it ubuntu:22.04 bash # apt update && apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev gdb git libonig- dev # cd ~ # /root # git clone https://github.com/php/php-src

Slide 6

Slide 6 text

PHPのコンパイルの準備 # cd php-src # ./buildconf -f # ./configure --enable-debug --enable-mbstring # make # make test # make install # --prefix を指定していないので/usr/local/に入る # php -v #これで実行できる!

Slide 7

Slide 7 text

この状態を保存します ● Command + p + qで抜けるか、もしくは別のコン ソールを開いてください ● > docker ps で開いているContainer IDを調べます ● > docker commit [container id] ubuntu:php84 – このようにすればubuntu:php84で今までの作業した内 容を保存して、コンパイルできた状態で入れます

Slide 8

Slide 8 text

このようにコンテナを作れました > docker run -it ubuntu:php84 root@ea6b72b5f128:/# php -v PHP 8.4.0-dev (cli) (built: May 31 2024 00:57:46) (NTS DEBUG) Copyright (c) The PHP Group Zend Engine v4.4.0-dev, Copyright (c) Zend Technologies

Slide 9

Slide 9 text

tips ● 今回はDockerを使いましたが、LinuxやmacOS内 部で複数のPHPを持ちたいときは --prefix オプ ションが便利です。 – --prefix=$HOME/php84 とかしてあげると、ホームディ レクトリ配下にバージョンごとにコンパイル・インストー ルができるわけです。

Slide 10

Slide 10 text

デバッグ手法 ● Linuxではgdbとかlldbなどが使えますが、今回はgdbを使い ます ● コンテナ内部でvimとctagsなどを利用してソースコードを読み ます – 手元でコンパイルできるとVisual Studio Codeがつかえたりするよ うですね ● https://php.github.io/php-src/introduction/ides/visual-studio-code.h tml – このあたり知ってる人は共有してくれると嬉しい

Slide 11

Slide 11 text

開発環境を揃える # apt install exuberant-ctags vim # cd ~/php-src # ctags -R . # カレントディレクトリが/root/php-src

Slide 12

Slide 12 text

コンパイルオプションあれこれ 変数 CC をつけるとコンパイラを指定できます 変数 CFLAGS でコンパイルオプションを指定できま す 例: CC=clang CFLAGS=”-g” ./configure –enable- debug # clangでコンパイルし、-gオプションを加え られます

Slide 13

Slide 13 text

テストについて https://www.phpinternalsbook.com/tests/runn ing_the_test_suite.html # sapi/cli/php run-tests.php # すべてのテストを行 う # sapi/cli/php run-tests.php -P ext/mbstring # mbstring拡張のみテストする

Slide 14

Slide 14 text

テストファイルについて https://www.phpinternalsbook.com/tests/phpt _file_structure.html .phptファイルを使ってテストを行います

Slide 15

Slide 15 text

あとはPHP Internals Bookに従いましょう ● レッツコントリビュート! ● これだけじゃ厳しいのはわかってるのであとはよし なに