Keep on going, never give up.

Ubuntu PHP扩展开发实例

1、Ubuntu安装编译包

首先需要安装PHP相关编译程序,有三种方法,任选其一即可:

方法1:$ sudo apt-get install git gcc make re2c php5 php5-json php5-dev libpcre3-dev

方法2:从PHP源码编译安装,本文从略。

方法3:使用XAMPP等第三方集成工具

方法1安装后,相关可执行文件都在/usr/bin/下面。方法3安装后,路径在/opt/lampp/bin/下面

2、下载PHP源码

下载地址:http://php.net/downloads.php

只要主版本跟上文安装的编译程序版本对应即可,比如5.6对应5.6,子版本差异都不大,不用区分。

4、生成框架

下载后,解压到Home目录下,然后进行下面操作生成框架:

cd php-5.6.17/ext

./ext_skel --extname=myefun

后面的myefun是扩展名,可根据需要自己修改,下文对应修改即可。

5、配置/函数修改

A、config.m4

dnl PHP_ARG_WITH(myefun, for myefun support,
dnl Make sure that the comment is aligned:
dnl [  --with-myefun             Include myefun support])

去掉dnl

PHP_ARG_WITH(myefun, for myefun support,
Make sure that the comment is aligned:
[  --with-myefun             Include myefun support])

B、函数修改

修改:

PHP_FUNCTION(confirm_myefun_compiled)

为:

PHP_FUNCTION(MyDecrypt)

修改:

const zend_function_entry myefun_functions[] = {
    PHP_FE(confirm_myefun_compiled,    NULL)        /* For testing, remove later. */
    PHP_FE_END    /* Must be the last line in myefun_functions[] */
};

const zend_function_entry myefun_functions[] = {
    PHP_FE(MyDecrypt,    NULL)        /* For testing, remove later. */
    PHP_FE_END    /* Must be the last line in myefun_functions[] */
};

其中MySecDecrypt为扩展中的函数名,可根据实际修改。

6、生成configure文件

cd php-5.6.17/ext/myefun
/usr/bin/phpize

如果不是单独安装PHP的,比如使用XAMPP,则可使用/opt/lampp/bin/phpize,Cannot find autoconf. Please check your 时,请安装:sudo apt-get install autoconf

7、编译

cd php-5.6.17/ext/myefun

./configure --with-php-config=/usr/bin/php-config
make

编译完成后,module目录下会看到该so文件。如果使用XAMPP,其中的PATH部分可改为/opt/lampp/bin/php-config,如下:

./configure --with-php-config=/opt/lampp/bin/php-config

8、修改为自动加载

为了使PHP能够找到需要的扩展文件,我们需要把编译好的so文件复制到PHP的扩展目录下,并在php.ini中配置:

extension=myefun.so

或者,测试时,指定完整路径:

extension="/home/Nmo/php-5.6.17/ext/myefun/modules/myefun.so"

然后重启APACHE。
# /etc/init.d/httpd restart

9、测试

在myefun目录下,随便创建一个PHP文件,内容如下:

<?php

echo MyDecrypt();

?>

然后在命令行下执行:

$ /usr/bin/php test.php

如果看到输出说明编译正确。

参考:

http://www.open-open.com/lib/view/open1392188698114.html

http://521-wf.com/archives/227.html

http://blog.csdn.net/denieljean/article/details/7688190

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.