×

phpextskel

关于phpextskel的信息

admin admin 发表于2023-03-25 11:18:18 浏览63 评论0

抢沙发发表评论

本文目录一览:

windows下开发并编译PHP扩展的方法

现在就简单说一在WINDOWS下开发PHP扩展的步骤:

首先需要准备的软件有:

cygwin

安装路径e:\app\cygwin

visual

studio

C++

6.0,

修改环境变量,把已经安装好的PHP路径设置为环境变量。在这里,假设我的PHP安装目录是:e:\app\php5.2.5,那么我把WINDOWS环境变量后面加上这个安装目录。方便一会儿使用php.exe。-phpextskel

PHP源代码,这里假设为e:\c_source_code\php-5.2.5

1、修改文件

“PHP源文件目录/ext/ext_skel_win32.php”,在这里就是:E:\c_source_code\php-5.2.5\ext,其中主要是修改其中的cygwin路径。$cygwin_path-phpextskel

=

'e:\app\cygwin\bin';

把$cygwin_path修改为你实际安装cygwin的路径。

2、在源代码ext目录也就是e:\c_source_code\php-5.2.5\ext下,执行

php

ext_skel_win32.php

--extname=EXT_NAME,此时会在ext目录下生成EXT_NAME目录,这个目录就是我们将要进行PHP扩展开发的框架。比如你运行php.exe

ext_skel_win32.php

--extname=foo,会在ext目录下生成foo目录。

3、将php-root\dev\php5ts.lib拷贝至

“ext/EXT_NAME”中。比如你要开发的PHP扩展名为foo,那么就需要把php-root\dev\php5ts.lib拷贝到PHP源文件目录\ext\foo中。

4、修改foo.c内容,编写我们需要的C代码。

5、进入EXT_NAME目录,打开EXT_NAME.dsp。

设置VC6工程,

设置菜单“组建”-“移除工程配置”,选中“Win

32

Release_TS”,

设置菜单“工程”,选中“Win

32

Release_TS”

打开Tab“连接”,设置“输出文件名”中的目录,

[可选]打开Tab“C/C++”,增加“预处理器定义”“,COMPILE_DL_EXT_NAME”(注意全大写,默认加入的),取消预定义“LIBZEND_EXPORTS”(否则不可引入zend函数)。-phpextskel

6、设置好以后,进行编译,会生成一个dll文件,文件名是EXT_NAME.dll,比如在我们的例子中就为foo.dll

把foo.dll拷到e:\app\ext目录下,并在php.ini里加上一行extension=foo.dll,重启一下apache,查看phpinfo();,会发现我们的PHP扩展foo()已经加载进来,已经可以使用这个foo扩展了。-phpextskel

如何在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也要修改.-phpextskel

默认生成的queryword.c(现在改名为queryword.cpp)了,已经包含了一个测试性质的导出函数,通过那个例子就可以大概明白怎么添加自己的函数了. zend_function_entry是导出函数列表, zend_module_entry描述了模块的信息. 不过因为是C++了,还是有几点要修改的,否则跑不起来:-phpextskel

如何写php扩展

PHP取得成功的一个主要原因之一是她拥有大量的可用扩展。web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到。PHP发行包包括支持各种数据库,图形文件格式,压缩,XML技术扩展在内的许多扩展。-phpextskel

扩展API的引入使PHP3取得了巨大的进展,扩展API机制使PHP开发社区很容易的开发出几十种扩展。现在,两个版本过去了,API仍然和PHP3时的非常相似。扩展主要的思想是:尽可能的从扩展编写者那里隐藏PHP的内部机制和脚本引擎本身,仅仅需要开发者熟悉API。-phpextskel

有两个理由需要自己编写PHP扩展。第一个理由是:PHP需要支持一项她还未支持的技术。这通常包括包裹一些现成的C函数库,以便提供PHP接口。例如,如果一个叫FooBase的数据库已推出市场,你需要建立一个PHP扩展帮助你从PHP里调用FooBase的C函数库。这个工作可能仅由一个人完成,然后被整个PHP社区共享(如果你愿意的话)。第二个不是很普遍的理由是:你需要从性能或功能的原因考虑来编写一些商业逻辑。-phpextskel

如果以上的两个理由都和你没什么关系,同时你感觉自己没有冒险精神,那么你可以跳过本章。

本章教你如何编写相对简单的PHP扩展,使用一部分扩展API函数。对于大多数打算开发自定义PHP扩展开发者而言,它含概了足够的资料。学习一门编程课程的最好方法之一就是动手做一些极其简单的例子,这些例子正是本章的线索。一旦你明白了基础的东西,你就可以在互联网上通过阅读文挡、原代码或参加邮件列表新闻组讨论来丰富自己。因此,本章集中在让你如何开始的话题。在UNIX下一个叫ext_skel的脚本被用于建立扩展的骨架,骨架信息从一个描述扩展接口的定义文件中取得。因此你需要利用UNIX来建立一个骨架。Windows开发者可以使用Windows ext_skel_win32.php代替ext_skel。-phpextskel

然而,本章关于用你开发的扩展编译PHP的指导仅涉及UNIX编译系统。本章中所有的对API的解释与UNIX和Windows下开发的扩展都有联系。

CentOS 6.5 yum安装php后缺少ext_skel

如果是为了使用php的话建议使用lnmp一键安装包来安装,如果是要学习安装环境的过程,请忽略我的回答。

lnmp安装脚本:

wget -c h t t p://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz tar zxf lnmp1.1-full.tar.gz cd lnmp1.1-full ./centos.sh-phpextskel

将上面网址中的http中间的空格删掉,防止被屏蔽,回车后会自动从官方下载并安装,详细教程可以去lnmp官方网站查看