Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHP7.4のFFIについて / About PHP-FFI
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryo Tomidokoro
November 27, 2019
Technology
2
3k
PHP7.4のFFIについて / About PHP-FFI
PHP-FFI Foreign Function Interfaceについてまとめました。
Ryo Tomidokoro
November 27, 2019
Tweet
Share
More Decks by Ryo Tomidokoro
See All by Ryo Tomidokoro
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
8
3.3k
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
2
1.5k
フロントエンドがTypeScriptなら、バックエンドはPHPでもいいじゃない/php-is-not-bad
hanhan1978
8
13k
どうすると生き残れないのか/how-not-to-survive
hanhan1978
17
14k
100分で本番デプロイ!Laravelで作るWebアプリケーション作成/100min_web_app_cicd
hanhan1978
1
240
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
8
3.4k
集中して作業する技術/how_to_work_deeply
hanhan1978
65
54k
PHPでデータベースを作ってみた/create-data-with-php
hanhan1978
11
11k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
8
4.7k
Other Decks in Technology
See All in Technology
超初心者からでも大丈夫!オープンソース半導体の楽しみ方〜今こそ!オレオレチップをつくろう〜
keropiyo
0
110
【Oracle Cloud ウェビナー】[Oracle AI Database + AWS] Oracle Database@AWSで広がるクラウドの新たな選択肢とAI時代のデータ戦略
oracle4engineer
PRO
2
170
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
140
FinTech SREのAWSサービス活用/Leveraging AWS Services in FinTech SRE
maaaato
0
130
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
200
配列に見る bash と zsh の違い
kazzpapa3
3
160
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
20260204_Midosuji_Tech
takuyay0ne
1
160
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
Tebiki Engineering Team Deck
tebiki
0
24k
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
170
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
94
WCS-LA-2024
lcolladotor
0
450
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Context Engineering - Making Every Token Count
addyosmani
9
660
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
86
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Automating Front-end Workflow
addyosmani
1371
200k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
350
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Embracing the Ebb and Flow
colly
88
5k
Transcript
PHP7.4のFFIについて Ryo Tomidokoro PHP勉強会 2019/11/27 @hanhan1978
FFIとは
Foreign Function Interface ↓ あるプログラミング言語から 他のプログラミング言語をコールする仕組
PHP以外の言語にもある
Perl FFI Ruby FFI Java JNI (Java Native Interface)
FFIという単語自体は 特定プログラミング言語の呼び出しを意図しない ↓ PHP FFIは何ができる?
[引用] PHP FFI Introduction - Manual https://www.php.net/manual/en/intro.ffi.php
PHP-FFIは、Cの共有ライブラリをloadして Cの関数、データ構造にアクセス出来る -> と書いてある FFIというよりPNIという方が誤解が無さそう...
現状では、PHPを自前でコンパイルする以外に使う方法無し -> --with-ffi オプションを指定 -> Linuxでは libffi-devが必要 インストール
Hello World
Macの場合は... libc.dylib で動く...多分
これが一体何の役に立つのか?
これまでのPHPでは... extensionを作る以外になかった ↓ FFIがあれば、PHPから直接コールできる!!
例えば OpenCV
https://github.com/vdechenaux/PhpWebcam
IoTでもPHP gpio拡張ではなく ネイティブのライブラリをそのまま利用 PHPで無理すんなという話もあるが...
例えば GTK
http://gtk.php.net/
それ以外の活用法
計算量の多いPHPのプログラム ↓ FFI経由の呼び出しにすることで高速化
https://blog.hanhans.net/2019/10/15/php-ffi/
いわゆるCPUバウンドな処理は効果大 DB接続などのIOが多い場合は効果が薄い ↓ PHP8ではPHP自体がJITコンパイル この最適化は無闇に依存関係を増やしているだけかも
私的な結論
あくまでも実験的な機能 仕事で使おうと考えない方が良いと思う。 ↓ 趣味のIoTや、言語自体の中身を深堀するなどの 研究的な用途としては非常に面白い。
まさに今、CPU負荷に困っていて ピンポイントに適用できそう!という野心的な方 ↓ 試すこと自体は気軽にできるので Let’s Try
そんな挑戦者に贈る
https://github.com/hanhan1978/php-ffi-samples C, Goを使ったサンプル集
PHP-FFIは、ネイティブライブラリとのIFとして FFI\CData を使用 GoでCGOを使う場合でも IFはCに合わせた方が上手くいきやすい。 GoのSliceとかは、特殊な構造体に変換されるので難しい。 PHP-FFIのコツ
FFIの呼び出し処理は、FFI\CDataも含めて、同一スコープ 内でやりきること 例えば、FFI\CDataを別Scopeで作成しても、参照先のポイ ンターがNullになってしまう。 PHP-FFIのコツ2
後半
PHP-FFIのことは、ざっくり分かった。 ↓ もっと深く!PHP-FFIの中身を見たい!(はず)
https://blog.hanhans.net/2019/10/30/gdb-ffi/
Linuxでは libffi を使う 1. dlopenで共有ライブラリをオープン 2. dlsymで実行したい関数のポインタを取得 3. ffi_prep_cifでffi_cif構造体を作成 4.
ffi_callで関数を実行 ざっとまとめると
字面だけでは分かりにくい
PHP-FFIがやっていることを簡潔にCで記述
FFIは楽しい!