需求:比如开发一个叫做 heiyeluren 的扩展,扩展里就一个函数 heiyeluren_test(),输入一个字符串,函数返回:Your input string: xxxxx。  
要求:了解C/C++编程,熟悉PHP编程  
环境:下载一份php对应版本的源码,我这里是 php-5.2.6,先正常安装php,假设我们的php安装在 /usr/local/php 目录,源码在 /root/soft/php/php-5.2.6/,现在开始! 
步骤一:生成扩展框架  
cd /root/soft/php/php-5.2.6/ext 
./ext_skel --extname=heiyeluren 
cd /root/soft/php/php-5.2.6/ext/heiyeluren 
vi config.m4 
打开文件后去掉 dnl ,获得下面的信息: 
PHP_ARG_ENABLE(heiyeluren, whether to enable heiyeluren support, 
[ --enable-heiyeluren Enable heiyeluren support]) 
保存退出. 
(图01) 
 
 
 
 
第二步:编写代码 
 
vi php_heiyeluren.h 
找到:PHP_FUNCTION(confirm_heiyeluren_compiled); ,新增一行: 
PHP_FUNCTION(heiyeluren_test);  
保存退出。 
(图02) 
 
 
  
vi heiyeluren.c 
数组里增加我们的函数,找到 zend_function_entry heiyeluren_functions[],增加: 
PHP_FE(heiyeluren, NULL) 
(图03) 
 
 
 
再到 heiyeluren.c 文件最后面增加如下代码: 
PHP_FUNCTION(heiyeluren_test) 
{ 
char *arg = NULL; 
int arg_len, len; 
char *strg; 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { 
return; 
} 
len = spprintf(&strg, 0, "Your input string: %s\n", arg); 
RETURN_STRINGL(strg, len, 0); 
} 
保存退出。 
(图04) 
 
 
 
 
 
第三步:编译安装 
 
cd /root/soft/php/php-5.2.6/ext/heiyeluren 
/usr/local/php/bin/phpize 
./configure --with-php-config=/usr/local/php/bin/php-config 
make 
make test 
make install 
现在看看是不是有个 /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/heiyeluren.so 
编辑php.ini,把扩展加入进去: 
vi /usr/local/php/lib/php.ini 
在[PHP]模块下增加: 
extension = heiyeluren.so 
保存退出。 
(图05) 
 
 
 
注意:如果你不存在扩展文件目录,或者安装报错,那么可以自行建立这个目录,然后把扩展拷贝到目录下,然后记得把 php.ini 文件中的 extension_dir 修改为该目录: 
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" 
(图06) 
 
 
 
 
第四步:检查安装结果 
现在看看模块加载了没有: 
/usr/local/php/bin/php -m,应该会打印出: 
[PHP Modules] 
... 
heiyeluren 
... 
[Zend Modules] 
 
然后重启apache,输出 phpinfo() ,应该能够看到: 
heiyeluren 
heiyeluren support enabled  
(图07) 
 
 
 
看看函数是否存在并且调用,在web目录下建立:heiyeluren.php 
<?php 
echo "<pre>"; 
print_r(get_loaded_extensions()); 
print_r(get_extension_funcs('heiyeluren')); 
echo heiyeluren_test('My first php extension'); 
echo "</pre>"; 
?> 
访问apache,应该能够看到: 
Array 
( 
... 
[33] => heiyeluren 
) 
Array 
( 
[0] => confirm_heiyeluren_compiled 
[1] => heiyeluren_test 
) 
Your input string: heiyeluren 
(图08) 
 
 
 
扩展制作成功! 
 |