Upgrade to Pro — share decks privately, control downloads, hide ads and more …

令和時代の PHP Extension の 作り方 〜 FFI を添えて〜

COLOPL Inc.
October 11, 2023

令和時代の PHP Extension の 作り方 〜 FFI を添えて〜

COLOPL Inc.

October 11, 2023
Tweet

More Decks by COLOPL Inc.

Other Decks in Technology

Transcript

  1. アジェンダ 2 1. 自己紹介 2. PHP Extension とは 3. PHP

    7.4 の FFI とは 4. How to Extension 開発 ◦ PHPT によるテスト ◦ Valgrind によるメモリチェック ◦ LLVM Sanitizer によるチェック
  2. 工藤 剛 技術基盤本部 第3バックエンドエンジニア部 サーバー基盤グループ PEチーム 2017 年新卒入社 運用タイトルのサーバーサイドエンジニアを経験後 SRE

    に その後は PE として全社共通部分などの開発、導入などを担当 PHP 8.2 の ext-random とか作ったり X (formerly Twitter): @zeriyoshi Mastodon: @[email protected] 3 氏名  : 部署名 : 自己紹介
  3. Zend Extension PHP Extension PHP FFI PHP Library 記述言語 C

    *1 C *1 PHP + C *2 PHP 実行形態 ネイティブ ネイティブ ハイブリッド Zend VM 拡張性 ほぼ何でも 広い 広い 言語の範囲内 開発難度 非常に高い 高い 中程度 低い 導入難度 高い 高い 非常に高い 低い PHP Extension とは 5 *1: C ABI (PHP ABI) に準拠したバイナリを出力可能なもの *2: FFI で呼び出した先はネイティブ, それ以外は Zend VM または ext-ffi で実行 主要な PHP の機能を拡張する仕組み
  4. PHP 7.4 の FFI とは 6 PHP 7.4 から導入された C

    ABI のライブラリを 利用できるようにする PHP Extension (ext-ffi) Extension を作らずともネイティブライブラリを利用可能に! …ただし
  5. PHP 7.4 の FFI とは 7 動作させるために必要な要件が結構多い! • ext-ffi PHP

    Extension が必要 ◦ 標準的な PHP 環境には入っていない ◦ Linux では libffi が必要 • 危険なこともできてしまう ◦ Z-Engine (ランタイムで実行エンジンに変更を加える) https://github.com/lisachenko/z-engine
  6. How to Extension 開発 - PHPT によるテスト 13 PHP は本体含め

    PHPT でテストが書かれている https://qa.php.net/phpt_details.php 最近追加されたドキュメント化されていないディレクティブ • EXTENSION: 読み込まれていなければスキップ • XLEAK: テストケースによる leak (Valgrind) を許容
  7. How to Extension 開発 - LLVM Sanitizerによるチェック ※ Pskel では

    MemorySanitizer のみ Valgrind 同様、メモリリークや未初期化領域へのアクセスを検出可能 Valgrind で見逃すようなものも検出可能なのでかけておくと一層安心できる run-tests.php を実行する際に –msan オプションを指定することで利用可能 15