Submit Search
Upload
OSS開発勉強会-03
•
0 likes
•
757 views
Kohei KaiGai
Follow
OSS開発勉強会-03 ~PHPモジュールの書き方~
Read less
Read more
Technology
Report
Share
Report
Share
1 of 13
Download now
Download to read offline
Recommended
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
Recommended
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
More Related Content
What's hot
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
What's hot
(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
Viewers also liked
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
Viewers also liked
(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
Similar to 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
株式会社ガリレオ(開発グループ)
Similar to 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
More from 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
More from 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
Recently uploaded
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
Ayachika Kitazaki
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
Toru Tamaki
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
keikoitakurag
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
Satoshi Makita
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
atsushi061452
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
iwashiira2ctf
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
Akihiro Kadohata
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
Sadaomi Nishi
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
Toru Tamaki
情報を表現するときのポイント
情報を表現するときのポイント
onozaty
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
瑛一 西口
Recently uploaded
(12)
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
情報を表現するときのポイント
情報を表現するときのポイント
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
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
Download now