php 安装及自定义模块

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install php7.0   # for PHP 7.0
sudo apt-get install php5.6   # for PHP 5.6
sudo apt-get install php5.5   # for PHP 5.5
./configure --enable-debug --enable-maintainer-zts --disable-cgi --enable-cli --disable-pear --disable-xml --disable-sqlite --without-mysql --enable-embed

出现错误 error: xml2-config not found. Please check your libxml2 installation
安装

sudo apt-get install libxml2-dev
make all install

配置文件

在ext/目录下 “sample” 目录(实际上可以位于其他位置),
在sample目录下 建立文件“config.m4”,内容为:

PHP_ARG_ENABLE(sample,
    [Whether to enable the "sample" extension],
    [ enable-sample Enable "sample" extension support])
if test $PHP_SAMPLE != "no"; then
        PHP_SUBST(SAMPLE_SHARED_LIBADD)
        PHP_NEW_EXTENSION(sample, sample.c,$ext_shared)
fi
为./configure 设置了一个 enable-sample的选项,PHP_ARG_ENABLE的第二个参数用于显示,第三个参数用于./configure help
如果使用 ./configure --enable-sample 那么$PHP_SAMPLE会被设置为yes。PHP_SUBST php的宏用于创建一个共享模块。
PHP_NEW_EXTENSION 声明模块,和需要编译的源文件(如果有多个源文件时,使用空格分隔),第三个参数与PHP_SUBST相对应。

头文件

php_sample.h

#ifndef PHP_SAMPLE_H

/* Prevent double inclusion */ 
#define PHP_SAMPLE_H
/* Define Extension Properties */
#define PHP_SAMPLE_EXTNAME  "sample"
#define PHP_SAMPLE_EXTVER   "1.0"

/* Import configure options when building outside of the PHP source tree */
#ifdef HAVE_CONFIG_H 
#include "config.h" 
#endif

/* Include PHP Standard Header */ 
#include "php.h"
/* Define the entry point symbol
* Zend will use when loading this module */
extern zend_module_entry sample_module_entry; 
#define phpext_sample_ptr &sample_module_entry
#endif /* PHP_SAMPLE_H */

zend_module_entry用于确保当使用 extension= 时,dlopen() 和dlsym()能够使用模块。

源文件

sample.c

#include "php_sample.h"

zend_module_entry sample_module_entry = { 
#if ZEND_MODULE_API_NO >= 20010901
    STANDARD_MODULE_HEADER, 
#endif
    PHP_SAMPLE_EXTNAME,
    NULL, /* Functions */
    NULL, /* MINIT */ 
    NULL, /* MSHUTDOWN */
    NULL, /* RINIT */ 
    NULL, /* RSHUTDOWN */
    NULL, /* MINFO */
#if ZEND_MODULE_API_NO >= 20010901
    PHP_SAMPLE_EXTVER,
#endif 
    STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_SAMPLE 
ZEND_GET_MODULE(sample) 
#endif

建立第一个扩展

首先,使用 phpize 命令以config.m4 为模板生成./configure 脚本。
其次,使用 ./configure –enable-sample
然后,使用 make 会在 modules文件夹下生成 so 文件

加载so

使用 php -i 查看查找 config 文件的路径
第一种方法,使用 dl(‘sample.so’);
第二种方法,使用 php.ini 文件中的 extension_dir 或者 extension

建立静态模块

使用 ./buildconf 来重新生成 ./configure

功能函数

PHP_FUNCTION()

在 sample.c 文件中 #include "php_sample.h"


PHP_FUNCTION(sample_hello_world)
{
    php_printf("Hello World!\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值