🙌
phpの拡張モジュール開発環境
PHP7の準備
既存のPHP関連パッケージを削除し、PHP7のインストールを行う
必要なパッケージのインストール
yum install -y wget bzip2 gcc
既存のPHP削除
yum remove php-*
PHP7インストール
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install --enablerepo=remi,remi-php73 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-pgsql
拡張モジュールの設定
拡張モジュールのスケルトンはPHP本体に同梱されている
PHP7の標準モジュールも同じく同梱されているため、実装が分からない場合は他のモジュールのソースを参考にする
PHP7のソースコード取得7.3.10
mkdir /home/[ユーザ名]/php-dev
cd /home/[ユーザ名]/php-dev
wget -O php-7.3.10.tar.bz2 http://jp2.php.net/get/php-7.3.10.tar.bz2/from/this/mirror
tar xjf php-7.3.10.tar.bz2
cd /php-7.3.10/ext
テンプレート作成
php ext_skel.php --ext [任意のモジュール名]
cd /[任意のモジュール名]
vi config.m4
dnl(コメントアウト)を外す
dnl PHP_ARG_ENABLE(my_ext, whether to enable my_ext support,
dnl Make sure that the comment is aligned:
dnl [ --enable-my_ext Enable my_ext support])
phpize
./configure --enable-[任意のモジュール名]
開発
修正対象
[任意のモジュール名].c
php_[任意のモジュール名].h
注意事項
いくつか独自の関数を使った方がいいものがある。らしい。
普通のC 拡張モジュールの場合
calloc ecalloc
free efree
基本的なメモリ管理
iniファイルを追加
vi [任意のモジュール名].ini
; Enable source_guard extension module
extension=source_guard
デバッグ
make
make test
php -d extension=modules/[任意のモジュール名].so [任意のモジュール名].php
本番
make
make install
systemctl restart httpd
php -m
systemctl restart httpd
Discussion