2022-09-18 18:58来源:m.sf1369.com作者:宇宇
安装了PHP之后,PHP文件就能本地执行了,如果鼠标双击PHP文件不运行的话,可以右键点了选择打开方式,然后选择你安装的PHP.EXE文件既可。
PHP安装之后(无论哪种安装方式,只要安了有PHP.EXE存在),就可以在命令提示符下使用PHP.EXE运行PHP文件,例如:
C:\> C:\PHP\PHP.EXE D:\WWW\ABC.PHP
当服务器上PHP已经安装好,需要额外添加PHP扩展时怎么办?不需要重新安装PHP,有了phpize我们可以在原有的PHP基础之上直接安装扩展库。
这次编译仅仅只是单独编译PHP的扩展库,接下来将编译好的扩展库加入到现在运行的php中,不对现在运行的php重新编译,所以没有一点的影响。
下面我们演示安装xsl的扩展(不一定常用,仅做为一个范例)
做法一:
1.找到当前运行的php版本的源代码目录,如php-5.2.3。进入xsl扩展库目录。
$cd /home/pkgs/php-5.3.3/ext/xsl
2.调用phpize程序生成编译配置文件。
$/home/app/php5.3.3/bin/phpize
3.编译扩展库,分别执行下面的configure和make命令。
$./configure-with-php-config=/home/app/php5.3.3/bin/php-config
这一步执行通过后,再执行make命令,如果configure执行不通过,则查找错误原因。
$make
#make成功执行后,生成的扩展库文件在当前目录的 modules子目录下,
如/home/php-5.3.3/ext/curl/modules/xsl.so
4.配置php.ini文件
#将编译好的扩展库文件复制到PHP的扩展目录下,可通过查看phpinfo信息。。
$ cp /home/pkg/php-5.3.3/ext/xsl/modules/xsl.so /home/app/php5.3.3/lib/php/extensions/no-debug-non-zts-20090626
#在php.ini文件中找到设置扩展目录的位置,然后将扩展路径设置到php安装目录/extension/no-debug-non....目录下,并添加扩展库位置。
extension_dir /home/app/php5.3.3/lib/php/extensions/no-debug-non-zts-20090626”
extension=xsl.so
5.重启php,查看phpinfo信息,即可看到刚才添加进去的xsl扩展库。(如果有多个php-fpm进程的话,平滑重启主进程即可:kill -USR2 pid)
首先,要到了Query归一化的C++版本源代码。
query归一化
引用第三方的类库有两种方法,一种是静态引用,一种是动态引用,推荐使用静态引用,因为静态引用的情况下,会把类库打包到php的扩展.SO文件中,这样我们不必担心依赖关系,带着类库到处跑了。
先用gcc产生.o文件,再用.o产生 最终的静态库 .a 文件
gcc -c -fpic queryword.cpp tradmap.cpp transcode.cpp -I . -O2
ar -r libqueryword.a queryword.o tradmap.o transcode.o
上边图中有产生的.o 和 .a文件
如果要动态编译so的话,就是这个:
gcc -c -fpic -O3 queryword.cpp tradmap.cpp transcode.cpp -I .
gcc -shared queryword.o transcode.o tradmap.o -o libqueryword.so
好,现在有了libqueryword.a静态库,我们就可以开始做我们的扩展了。
先使用ext_skel工具生成我们框架的骨架.
./ext_skel –extname=queryword
把上边的静态库放到 ./lib 目录下。
然后修改config.m4文件。
去掉一些注释符 dnl, 再添加两行,最后config.m4里,有用的就是这几行。
PHP_ARG_ENABLE(queryword, whether to enable queryword support,
Make sure that the comment is aligned:
[ --enable-queryword Enable queryword support])
if test $PHP_QUERYWORD != no; then
PHP_ADD_INCLUDE(./lib)
PHP_ADD_LIBRARY(stdc++, 1, QUERYWORD_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(queryword, ./lib, QUERYWORD_SHARED_LIBADD)
PHP_REQUIRE_CXX()
PHP_SUBST(QUERYWORD_SHARED_LIBADD)
PHP_NEW_EXTENSION(queryword, queryword.cpp, $ext_shared)
fi
其中:
PHP_REQUIRE_CXX()用于指定这个扩展用到了C++
PHP_ADD_LIBRARY(stdc++, 1, QUERYWORD_SHARED_LIBADD) 用于将标准C++库链接进入扩展
PHP_NEW_EXTENSION用于指定有哪些源文件应该被编译,文件和文件之间用空格隔开.ext_skel默认生成的模块框架是针对C的,我们要使用C++,那以上说明的两个宏就是必须的.另外还要把queryword.c改名成queryword.cpp,所以PHP_NEW_EXTENSION原本包括的queryword.c也要修改.
默认生成的queryword.c(现在改名为queryword.cpp)了,已经包含了一个测试性质的导出函数,通过那个例子就可以大概明白怎么添加自己的函数了. zend_function_entry是导出函数列表, zend_module_entry描述了模块的信息. 不过因为是C++了,还是有几点要修改的,否则跑不起来: