电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

用C++扩展PHP模板VIP免费

用C++扩展PHP模板_第1页
1/7
用C++扩展PHP模板_第2页
2/7
用C++扩展PHP模板_第3页
3/7
用C++扩展PHP源自天地常如客的CSDN原创第1节.开始之前文章所描述的主要是在UNIX的PHP环境上的。一些说明...$PHP_HOME是指你的PHP源代码的位置,如:你解开的PHP源代码包所放的位置。我们用来做例子的模块叫做php5cpp.第2节.安装在你用C++编写PHP扩展前,你先要搭建一个基本的扩展模块的架构。在UNIX下,你可以运行一个在$PHP_HOME/ext下叫做ext_skel的shell脚本。先切换到$PHP_HOME/ext目录和执行那个shell脚本,并用--extname参数为你的扩展模块命名。jay@monty~$cdsetup/php/php-5.x.x/extjay@monthext$./ext_skel--extnamephp5cpp这样,在$PHP_HOME/ext/php5cpp下,我们已经有了一个基本的PHP扩展模块架构。唯一的问题是,它是为C搭建的,而不是为C++。第3节.修改config.m4现在我们要修改那个扩展模块的config.m4文件以支持C++。你不需要做太多的改动,要做的只是告诉编译PHP的系统,你的模块是使用C++的,而且需要连接C++标准库。下边是一个删去自动生成的注释后,php5cpp扩展模块的config.m4文件的例子:(红色部分是新加的,第四句中原来的.c文件改为.cpp)PHP_ARG_ENABLE(php5cpp,forphp5cppsupport,[--enable-php5cppEnablephp5cppsupport])iftest"$PHP_php5cpp"!="no";thenPHP_REQUIRE_CXX()PHP_ADD_LIBRARY_WITH_PATH(stdc++,"",PHP5CPP_SHARED_LIBADD)PHP_SUBST(PHP5CPP_SHARED_LIBADD)PHP_NEW_EXTENSION(php5cpp,php5cpp.cpp,$ext_shared)fi注意其中的PHP_REQUIRE_CXX(),和php5cpp.c已经变成了php5cpp.cpp了。第4节.编写代码修改完config.m4后,你可以编写代码了。记住把php5cpp.c修改成C++文件的名字。根据前边config.m4的修改,在这里我们把它改成php5cpp.cpp.现在你可以开始编写你的代码了。但是你如果现在编译这个扩展代码的话,可能会生一个so,并且不会产生任何编译错误,但是并不能在PHP中使用。如果你把它静态编译进PHP,则会产生连接错误。这是因为C和C++的变量空间的不一致引起的(PHP是使用C来编写,你的扩展使用C++来编写)。修改的方法就是,你要告诉你的扩展模块,将把一些PHPAPI函数当成C函数来对待(他们是用C来写的),而不是当成C++。你需要把一些代码用BEGIN/END_EXTERN_C()包起来。你的php5cpp.cpp可能要写成像下边的样子:extern"C"{#include"php.h"#include"php_ini.h"#include"ext/standard/info.h"}//这里不用把自动生成的那个头文件包含在extern里面#ifdefCOMPILE_DL_PHP5CPPBEGIN_EXTERN_C()ZEND_GET_MODULE(php5cpp)END_EXTERN_C()#endif一般地,我们是用BEGIN/END_EXTERN_C()来包起头文件的那些内容,如对ZEND_GET_MODULE(php5cpp)那样。但是在引用声明BEGIN/END_EXTERN_C()的zend.h文件前,可以通过使用extern"C"来达到相同的作用。第5节.编译扩展模块(一)环境准备到你的模块的目录下,运行phpize命令(假设你已经安装了PEAR,这里要装AUTOCONF,我运行的时候因为没安装这个所以phpize运行失败.我用ports下自带的autoconf259安装,安装完后运行ln-s/usr/local/bin/autoconf253/usr/local/bin/autoconfln-s/usr/local/bin/autoheader253/usr/local/bin/autoheader不然运行phpize的时候不认),它会为你的模块创建一个configure脚本。然后运行./Configuremakemakeinstalla.如果你想让你的模块自动加载,你要修改php.ini以加载正确的文件。如:加上类似的一行:extension=php5cpp.so。(这里奇怪的是我自己指定的extention目录,将编译好的SO加入到里面,PHP加载不进去,使用系统默认的LIB目录才行)b.如果是在PHP代码里动态加载,可以模仿以下代码(取自php5cpp.php)";if(!extension_loaded('php5cpp')){dl('php5cpp.'.PHP_SHLIB_SUFFIX);}$module='php5cpp';$functions=get_extension_funcs($module);echo"Functionsavailableinthetestextension:$br/n";foreach($functionsas$func){echo$func."$br/n";}echo"$br/n";$function='confirm_'.$module.'_compiled';if(extension_loaded($module)){$str=$function($module);}else{$str="Module$moduleisnotcompiledintoPHP";}echo"$str/n";?>现在你的PHP扩展模块...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

用C++扩展PHP模板

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部