主页 > 程序语言 > 谁知道怎么扩展php、就是说能让php文件运行在本服务器上

谁知道怎么扩展php、就是说能让php文件运行在本服务器上

2022-09-18 18:58来源:m.sf1369.com作者:宇宇

一、谁知道怎么扩展php、就是说能让php文件运行在本服务器上

安装了PHP之后,PHP文件就能本地执行了,如果鼠标双击PHP文件不运行的话,可以右键点了选择打开方式,然后选择你安装的PHP.EXE文件既可。

PHP安装之后(无论哪种安装方式,只要安了有PHP.EXE存在),就可以在命令提示符下使用PHP.EXE运行PHP文件,例如:

C:\> C:\PHP\PHP.EXE D:\WWW\ABC.PHP

二、如何设置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)

三、如何在php扩展中封装一个c++类

首先,要到了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++了,还是有几点要修改的,否则跑不起来:

相关推荐

哪些编程语言是函数式的

程序语言 2024-01-14

VB编程的函数详解

程序语言 2024-01-02

c语言扑克牌问题

程序语言 2023-12-28

iphone语言与地区有什么用?

程序语言 2023-12-19

C语言程序,怎么使用,

程序语言 2023-12-17

把word嵌入到C#程序中

程序语言 2023-11-26

HTML是不是编程语言?

程序语言 2023-11-17