Enviar pesquisa
Carregar
OSS開発勉強会-03
•
0 gostou
•
757 visualizações
Kohei KaiGai
Seguir
OSS開発勉強会-03 ~PHPモジュールの書き方~
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 13
Baixar agora
Baixar para ler offline
Recomendados
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
do_aki
CodeIgniter入門
CodeIgniter入門
Sho A
PHP勉強会 #51
PHP勉強会 #51
Takako Miyagawa
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回
Shigeharu Yamaoka
はじめてのCodeIgniter
はじめてのCodeIgniter
Yuya Matsushima
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
Atsuhiro Kubo
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
Kenichirou Oyama
php-src の歩き方
php-src の歩き方
do_aki
Recomendados
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
do_aki
CodeIgniter入門
CodeIgniter入門
Sho A
PHP勉強会 #51
PHP勉強会 #51
Takako Miyagawa
運用構築技術者の為のPSプログラミング第1回
運用構築技術者の為のPSプログラミング第1回
Shigeharu Yamaoka
はじめてのCodeIgniter
はじめてのCodeIgniter
Yuya Matsushima
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
Atsuhiro Kubo
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
Kenichirou Oyama
php-src の歩き方
php-src の歩き方
do_aki
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
Gosuke Miyashita
Php5.4
Php5.4
ke-m kamekoopa
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
do_aki
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
PECL を数えてみた
PECL を数えてみた
y-uti
FuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみた
Katsuhiro Miura
JIT のコードを読んでみた
JIT のコードを読んでみた
y-uti
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
Php in ruby
Php in ruby
do_aki
eZ Publish勉強会5月「eZ Find」
eZ Publish勉強会5月「eZ Find」
ericsagnes
はじめての FuelPHP
はじめての FuelPHP
Sho A
20120327 phpstudy58-phake
20120327 phpstudy58-phake
Katsuhiro Ogawa
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
do_aki
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
Fumito Mizuno
Fuel php osc tokyo2012
Fuel php osc tokyo2012
Fumito Mizuno
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
kenjis
OSS開発勉強会
OSS開発勉強会
Kohei KaiGai
OSS開発勉強会-07
OSS開発勉強会-07
Kohei KaiGai
Mais conteúdo relacionado
Mais procurados
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
hiro345
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
Gosuke Miyashita
Php5.4
Php5.4
ke-m kamekoopa
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
do_aki
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
PECL を数えてみた
PECL を数えてみた
y-uti
FuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみた
Katsuhiro Miura
JIT のコードを読んでみた
JIT のコードを読んでみた
y-uti
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
Php in ruby
Php in ruby
do_aki
eZ Publish勉強会5月「eZ Find」
eZ Publish勉強会5月「eZ Find」
ericsagnes
はじめての FuelPHP
はじめての FuelPHP
Sho A
20120327 phpstudy58-phake
20120327 phpstudy58-phake
Katsuhiro Ogawa
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
do_aki
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
Fumito Mizuno
Fuel php osc tokyo2012
Fuel php osc tokyo2012
Fumito Mizuno
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
kenjis
Mais procurados
(20)
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
Php5.4
Php5.4
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
PHP AST 徹底解説
PHP AST 徹底解説
PECL を数えてみた
PECL を数えてみた
FuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみた
JIT のコードを読んでみた
JIT のコードを読んでみた
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Php in ruby
Php in ruby
eZ Publish勉強会5月「eZ Find」
eZ Publish勉強会5月「eZ Find」
はじめての FuelPHP
はじめての FuelPHP
20120327 phpstudy58-phake
20120327 phpstudy58-phake
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
Fuel php osc tokyo2012
Fuel php osc tokyo2012
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
Destaque
OSS開発勉強会
OSS開発勉強会
Kohei KaiGai
OSS開発勉強会-07
OSS開発勉強会-07
Kohei KaiGai
memcached + selinux engine
memcached + selinux engine
Kohei KaiGai
OSS開発勉強会-10
OSS開発勉強会-10
Kohei KaiGai
LCJ2010-KaiGai-sepgsql
LCJ2010-KaiGai-sepgsql
Kohei KaiGai
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Kohei KaiGai
LAPP/SELinux - A secure web application platform powered by SELinux
LAPP/SELinux - A secure web application platform powered by SELinux
Kohei KaiGai
LAPP/SELinux - A secure web application stack using SE-PostgreSQL
LAPP/SELinux - A secure web application stack using SE-PostgreSQL
Kohei KaiGai
PG-Strom - GPU Accelerated Asyncr
PG-Strom - GPU Accelerated Asyncr
Kohei KaiGai
LAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinux
Kohei KaiGai
Writable Foreign Data Wrapper (JPUG Unconference 16-Feb-2013)
Writable Foreign Data Wrapper (JPUG Unconference 16-Feb-2013)
Kohei KaiGai
Security Enhanced PostgreSQL - System-wide consistency in access control
Security Enhanced PostgreSQL - System-wide consistency in access control
Kohei KaiGai
Label based Mandatory Access Control on PostgreSQL
Label based Mandatory Access Control on PostgreSQL
Kohei KaiGai
Row-level Security
Row-level Security
Kohei KaiGai
Getting Memcached Secure
Getting Memcached Secure
Kohei KaiGai
Destaque
(15)
OSS開発勉強会
OSS開発勉強会
OSS開発勉強会-07
OSS開発勉強会-07
memcached + selinux engine
memcached + selinux engine
OSS開発勉強会-10
OSS開発勉強会-10
LCJ2010-KaiGai-sepgsql
LCJ2010-KaiGai-sepgsql
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
Custom Scan API - PostgreSQL Unconference #3 (18-Jan-2014)
LAPP/SELinux - A secure web application platform powered by SELinux
LAPP/SELinux - A secure web application platform powered by SELinux
LAPP/SELinux - A secure web application stack using SE-PostgreSQL
LAPP/SELinux - A secure web application stack using SE-PostgreSQL
PG-Strom - GPU Accelerated Asyncr
PG-Strom - GPU Accelerated Asyncr
LAPP/SELinux - A secure web application stack powered by SELinux
LAPP/SELinux - A secure web application stack powered by SELinux
Writable Foreign Data Wrapper (JPUG Unconference 16-Feb-2013)
Writable Foreign Data Wrapper (JPUG Unconference 16-Feb-2013)
Security Enhanced PostgreSQL - System-wide consistency in access control
Security Enhanced PostgreSQL - System-wide consistency in access control
Label based Mandatory Access Control on PostgreSQL
Label based Mandatory Access Control on PostgreSQL
Row-level Security
Row-level Security
Getting Memcached Secure
Getting Memcached Secure
Semelhante a OSS開発勉強会-03
Immortal
Immortal
do_aki
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Yoshifumi Kawai
20091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
shigeya
PEZY-SC programming overview
PEZY-SC programming overview
Ryo Sakamoto
PHPでマルチスレッド
PHPでマルチスレッド
karky7
Webサーバ勉強会03
Webサーバ勉強会03
oranie Narut
phpext-2-takagi
phpext-2-takagi
Masahiro Takagi
第21回Creators MeetUp
第21回Creators MeetUp
Kenichi Mukai
T93 com入門
T93 com入門
伸男 伊藤
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
Etsuji Nakai
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
Takashi Uemura
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
Yuki Takei
Personal Cloud Automation
Personal Cloud Automation
Etsuji Nakai
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
Taisuke Yamada
Nodejuku01 ohtsu
Nodejuku01 ohtsu
Nanha Park
Code ignitertalk 01
Code ignitertalk 01
Takako Miyagawa
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
Kiyoshi Sawada
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
shinjiigarashi
WordPress と Bootstrap
WordPress と Bootstrap
株式会社ガリレオ(開発グループ)
Semelhante a OSS開発勉強会-03
(20)
Immortal
Immortal
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
20091030cakephphandson 01
20091030cakephphandson 01
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
PEZY-SC programming overview
PEZY-SC programming overview
PHPでマルチスレッド
PHPでマルチスレッド
Webサーバ勉強会03
Webサーバ勉強会03
phpext-2-takagi
phpext-2-takagi
第21回Creators MeetUp
第21回Creators MeetUp
T93 com入門
T93 com入門
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
WordPressでオリジナルサイトを作るための最初の一歩的なカスタマイズテクニック
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
Personal Cloud Automation
Personal Cloud Automation
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
Nodejuku01 ohtsu
Nodejuku01 ohtsu
Code ignitertalk 01
Code ignitertalk 01
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
EWD 3トレーニングコース#28 従来のMUMPSコードをewd-xpressと統合する
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
WordPress と Bootstrap
WordPress と Bootstrap
Mais de Kohei KaiGai
20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History
Kohei KaiGai
20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API
Kohei KaiGai
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count
Kohei KaiGai
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0
Kohei KaiGai
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache
Kohei KaiGai
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
Kohei KaiGai
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS
Kohei KaiGai
20201113_PGconf_Japan_GPU_PostGIS
20201113_PGconf_Japan_GPU_PostGIS
Kohei KaiGai
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing
Kohei KaiGai
20200828_OSCKyoto_Online
20200828_OSCKyoto_Online
Kohei KaiGai
20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw
Kohei KaiGai
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw
Kohei KaiGai
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
20191115-PGconf.Japan
20191115-PGconf.Japan
Kohei KaiGai
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
Kohei KaiGai
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
Kohei KaiGai
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai
Kohei KaiGai
20190516_DLC10_PGStrom
20190516_DLC10_PGStrom
Kohei KaiGai
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw
Kohei KaiGai
Mais de Kohei KaiGai
(20)
20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History
20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201113_PGconf_Japan_GPU_PostGIS
20201113_PGconf_Japan_GPU_PostGIS
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing
20200828_OSCKyoto_Online
20200828_OSCKyoto_Online
20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
20191115-PGconf.Japan
20191115-PGconf.Japan
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai
20190516_DLC10_PGStrom
20190516_DLC10_PGStrom
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw
Último
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Último
(11)
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
OSS開発勉強会-03
1.
PHP拡張モジュールの動作原理 OSS推進センター 海外浩平 <kaigai@ak.jp.nec.com>
2.
PECL (PHP Extension
Community Library) PHPからSELinuxを 呼び出すための インターフェース群 PHPからSELinuxを 呼び出すための インターフェース群
3.
PHPスクリプトの実行 /usr/bin/php -q <? : : my_function(); : : ?> スクリプト /usr/bin/php インタープリタ my_module.so my_function() pgsql.so pq_query() 拡張モジュール 拡張モジュール Zend
APIZend API ビルトイン 関数
4.
zend_module_entry 構造体 (1/2) typedef
struct _zend_module_entry zend_module_entry; struct _zend_module_entry { : const char *name; const struct _zend_function_entry *functions; int (*module_startup_func)(INIT_FUNC_ARGS); int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS); int (*request_startup_func)(INIT_FUNC_ARGS); int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS); void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS); const char *version; : };
5.
zend_module_entry 構造体 (2/2) /*
SELinux module entry */ zend_module_entry selinux_module_entry = { STANDARD_MODULE_HEADER, "selinux", selinux_functions, NULL, /* module_startup_func */ NULL, /* module_shutdown_func */ NULL, /* request_startup_func */ NULL, /* request_shutdown_func */ NULL, /* info_func */ NO_VERSION_YET, STANDARD_MODULE_PROPERTIES, }; #ifdef COMPILE_DL_SELINUX ZEND_GET_MODULE(selinux) #endif zend_module_entry * get_module(void) { return &name##_module_entry; } zend_module_entry * get_module(void) { return &name##_module_entry; }
6.
zend_function_entry構造体 (1/2) #define INTERNAL_FUNCTION_PARAMETERS
¥ int ht, zval *return_value, zval **return_value_ptr, ¥ zval *this_ptr, int return_value_used TSRMLS_DC typedef struct _zend_function_entry { const char *fname; void (*handler)(INTERNAL_FUNCTION_PARAMETERS); const struct _zend_arg_info *arg_info; zend_uint num_args; zend_uint flags; } zend_function_entry;
7.
zval構造体
8.
zend_function_entry構造体 (2/2) ZEND_BEGIN_ARG_INFO(arginfo_selinux_setenforce, 0) ZEND_ARG_INFO(0,
mode) ZEND_END_ARG_INFO() : zend_function_entry selinux_functions[] = { /* global state API */ PHP_FE(selinux_is_enabled, arginfo_selinux_is_enabled) PHP_FE(selinux_getenforce, arginfo_selinux_getenforce) PHP_FE(selinux_setenforce, arginfo_selinux_setenforce) : }; : PHP_FUNCTION(selinux_setenforce) { : }
9.
PHP関数はどう定義されるか? PHP_FUNCTION(selinux_setenforce) { long mode; if (zend_parse_parameters(ZEND_NUM_ARGS()
TSRMLS_CC, "l", &mode) == FAILURE) return; if (!security_setenforce(mode)) RETURN_TRUE; RETURN_FALSE; } void zif_selinux_setenforce(INTERNAL_FUNCTION_PARAMETERS) { return_value->type = IS_BOOL; return_value->value.lval = false; return; } int ht, zval *return_value, zval **return_value_ptr, ¥ zval *this_ptr, int return_value_used TSRMLS_DC
10.
引数の受け渡し (1/2) zend_parse_parameters() 関数 可変長引数を持ち、変換仕様に応じて、スタックに積まれた PHP関数の引数を解釈する 変換仕様の一例 s
… 文字列 (string) l … 整数値 (long) b … 論理値 (bool) d … 浮動小数点型 (double) z … zval | … 次のパラメータは省略可能 (optional) ZEND_API int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...) 【使用例】 zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sb", &name, &length, &new_value);
11.
引数の受け渡し (2/2) Thread Safe
Resource Manager #ifdef ZTS #define TSRMLS_DC , void ***tsrm_ls #define TSRMLS_CC , tsrm_ls #else #define TSRMLS_DC #define TSRMLS_CC #endif Thread-1: zend_executor_globals->argument_stack Thread-N: zend_executor_globals->argument_stack : マルチスレッドが有効なビルドでは、 PHP関数にTSRMへのポインタが渡される マルチスレッドが有効なビルドでは、 PHP関数にTSRMへのポインタが渡される zval *の配列を内包
12.
配列を返す関数 方針 return_value に配列 (IS_ARRAY)
をセットしてリターン 配列オブジェクトを作る方法 array_init(zval *zval, uint size); で初期化 add_assoc_xxx(zval *zval, const char *key, xxx value); add_index_xxx(zval *zval, ulong idx, xxx value); で、配列要素を追加 (xxxの部分はデータ型) 配列として構築された zval を配列の要素としてセットする ことで、多次元配列を表現する事ができる。 array_init(return_value); for (i=0; contexts[i]; i++) { add_index_string(return_value, i, contexts[i], 1); }
13.
参考資料 PHP Manual -
A Hacker's Guide to the Zend Engine http://usphp.com/manual/en/internals2.php PHP Extension Development http://www.somabo.de/talks/200510_zend_conf_php_e xtension_development.pdf
Baixar agora