php的扩展和嵌入--c扩展开发demo! print "helloworld"
2013-12-19 10:03
656 查看
在linux下面完成了LAMP的配置环境之后,就可以进行php的扩展开发了。
php中的扩展开发都在源码包的/ext文件夹之下,可以看到这里已经有了很多开发好的扩展。比如与数据库相关的mysql以及xml处理的模块等等。
首先建立一个文件夹:
mkdir hello
在进入这个文件夹之后,先创建并打开一个配置文件:
vim config.m4
这个给出一个配置问题的实例:
?
* 这个配置文件创造了一个--enable-hello的配置选项,而PHP_ARG_ENABLE的第二个选项会在配置的时候显示出来
* PHP_ARG_ENABLE的第三个参数则是在调用./configurehelp的时候会显示出来
* 为什么有时候用enable-xxx,有时候用with-xxx?enable是可以关掉的,但是with需要额外的第三方的库
* 如果说--enable-hello在配置的时候有了,那么$PHP_HELLO这个参数就会被设为yes,那么才有接下来的操作
* PHP_NEW_EXTENSION则是要声明所有需要的源文件:PHP_NEW_EXTENSION(sample, sample.c sample2.c sample3.c, $ext_shared)
* 最后一个参数在building一个shared module的时候一般是这么些的。$ext_shared
下面列出在config文件中可能有的配置选项: * PHP_ARG_WITH 或者 PHP_ARG_ENABLE 指定了PHP扩展模块的工作方式,前者意味着不需要第三方库,后者正好相反;
* PHP_REQUIRE_CXX 用于指定这个扩展用到了C++;
* PHP_ADD_INCLUDE 指定PHP扩展模块用到的头文件目录;
* PHP_CHECK_LIBRARY 指定PHP扩展模块PHP_ADD_LIBRARY_WITH_PATH定义以及库连接错误信息等;
* PHP_ADD_LIBRARY(stdc++,”",EXTERN_NAME_LIBADD)用于将标准C++库链接进入扩展
* PHP_SUBST(EXTERN_NAME_SHARED_LIBADD) 用于说明这个扩展编译成动态链接库的形式;
* PHP_NEW_EXTENSION 用于指定有哪些源文件应该被编译,文件和文件之间用空格隔开;
接下来看头文件:php_sample.h
?
最后再注意两点: * php.h则是一定要引入的
* 声明zend_module_entry被声明为extern,所以当扩展被以extension=。。的形式加载的时候,Zend能够通过dlopen()和dlsym()找到它。
最后来看源文件sample.c:
?
这就是源码的内容了。
接下来需要进行扩展的生成: phpize ./configure --enable-sample make sudo make install 在执行完这些语句之后,需要在php.ini中添加这个扩展名:extension=sample.so 然后再重启一下apache sudo /etc/init.d/httpd restart
接下来在phpinfo页面中查看是否sample这个扩展已经有了,如果有了,那么在下面test.php中验证:
?
如果打印除了"Hello World!",那么就说明这个php扩展开发成功了。
转载地址:http://www.2cto.com/kf/201312/265499.html
php中的扩展开发都在源码包的/ext文件夹之下,可以看到这里已经有了很多开发好的扩展。比如与数据库相关的mysql以及xml处理的模块等等。
首先建立一个文件夹:
mkdir hello
在进入这个文件夹之后,先创建并打开一个配置文件:
vim config.m4
这个给出一个配置问题的实例:
?
* PHP_ARG_ENABLE的第三个参数则是在调用./configurehelp的时候会显示出来
* 为什么有时候用enable-xxx,有时候用with-xxx?enable是可以关掉的,但是with需要额外的第三方的库
* 如果说--enable-hello在配置的时候有了,那么$PHP_HELLO这个参数就会被设为yes,那么才有接下来的操作
* PHP_NEW_EXTENSION则是要声明所有需要的源文件:PHP_NEW_EXTENSION(sample, sample.c sample2.c sample3.c, $ext_shared)
* 最后一个参数在building一个shared module的时候一般是这么些的。$ext_shared
下面列出在config文件中可能有的配置选项: * PHP_ARG_WITH 或者 PHP_ARG_ENABLE 指定了PHP扩展模块的工作方式,前者意味着不需要第三方库,后者正好相反;
* PHP_REQUIRE_CXX 用于指定这个扩展用到了C++;
* PHP_ADD_INCLUDE 指定PHP扩展模块用到的头文件目录;
* PHP_CHECK_LIBRARY 指定PHP扩展模块PHP_ADD_LIBRARY_WITH_PATH定义以及库连接错误信息等;
* PHP_ADD_LIBRARY(stdc++,”",EXTERN_NAME_LIBADD)用于将标准C++库链接进入扩展
* PHP_SUBST(EXTERN_NAME_SHARED_LIBADD) 用于说明这个扩展编译成动态链接库的形式;
* PHP_NEW_EXTENSION 用于指定有哪些源文件应该被编译,文件和文件之间用空格隔开;
接下来看头文件:php_sample.h
?
* 声明zend_module_entry被声明为extern,所以当扩展被以extension=。。的形式加载的时候,Zend能够通过dlopen()和dlsym()找到它。
最后来看源文件sample.c:
?
接下来需要进行扩展的生成: phpize ./configure --enable-sample make sudo make install 在执行完这些语句之后,需要在php.ini中添加这个扩展名:extension=sample.so 然后再重启一下apache sudo /etc/init.d/httpd restart
接下来在phpinfo页面中查看是否sample这个扩展已经有了,如果有了,那么在下面test.php中验证:
?
转载地址:http://www.2cto.com/kf/201312/265499.html
相关文章推荐
- cocos2d 游戏开发:Cocos2d v3 "hello world"+显示飞船
- cocos2d 游戏开发:Cocos2d v3 "hello world"+显示飞船
- Revit二次开发--"Hello World"
- PacMan开发-Win32的"HelloWorld"&WinMain()函数
- python-gtk-3-tutorial(2)--"Print hello world"
- PacMan开发-Win32的"HelloWorld"&WinMain()函数
- PacMan开发-Win32的"HelloWorld"&MyRegisterClass()函数
- 开发一个应用程序的思路:"Hello World"
- 利用开发人员命令提示输出"Hello world"
- PacMan开发-Win32的"HelloWorld"&MyRegisterClass()函数
- PHP扩展开发hello_world
- 使用 NetBeans 开发 Java EE 5 "Hello World"
- Revit二次开发--"Add Hello World Ribbon Panel"
- RPC Fault faultString="Cannot invoke method 'helloWorld'." faultCode="Server.ResourceUnavailable" fa
- 『原创』用C++开发WM应用系列(1)——"Hello World" Pro!(上)
- 无参数参数传递打印出"hello world"
- iPhone起步-1: "Hello,World!" in iPhone Development (转)
- MyEclipse下编写JSP "Hello World"
- char p[] = "hello world" 与 char *p = "Hello world" 的差异
- ICE第二篇--一个"hello world"的简单例子