PHP扩展开发——环境部署

很长时间没有认真的写篇文章,从今天开始正式学习PHP扩展开发,之前在Linux上也折腾过,只是认为在Linux上没有熟悉的C++ IDE,看PHP底层源码不方便,是转向Windows上部署环境,配合VS2010,源码查看、智能提示方便多了。PHP扩展开发是基于C语言,自己对C/C++比较熟悉,从扩展开发这个方向了解PHP Zend虚拟机底层实现应该是一条比较好的途径。本文主要介绍在Linux、Windows环境如何部署PHP扩展开发环境,以及我遇到的一些问题。

1、Linux平台环境配置
Linux平台配置过程很容易,本节以centos 4.3为例

  • step1:下载PHP源码包,并解压
  • step2:使用ext_skel生成工程框架
./ext_skel --extname=myext

(1)在.h文件中声明导出函数:

    PHP_FUNCTION(sqlapm);

(2)在.c文件中实现导出函数

PHP_FUNCTION(sqlapm)
{
    php_printf("sqlapm....");
}
  • step3:编译生成.so文件
    修改config.m4文件将10、11、12三行最前面的dnl删除掉
phpize
./configure --with-php-config=..../php/bin/php-config
make
make test

然后在工程下面module目录下生myext.so文件,拷贝至lib/php/extensions/no-debug-non-zts-20121212目录下,修改php.ini文件,php -m验证模块是否加载。

2、Windows平台环境配置
Linux平台配置方式非常容易,但在Linux下查看php源码,开发效率效率较低,Windows下面VS IDE非常强大,智能提示都很方便。许多教程介绍VC++6.0的配置过程,但是VC++6.0平台不支持64位编译,而且win7以上兼容性不好,本节介绍的是VS2010配置过程。

  • step1:使用ext_skel生成工程框架
php ext_skel_win32.php --extname=myext

如果生成出错,请检查下面两点:
(1)事先要安装cygwin,并且修改ext_skel_win32.php中的$cygwin_path路径;
(2)源码目录名不能包含空格;

  • step2:打开myext.dsp工程文件、编译工程
    (1)这时提示main/config.win32.h文件缺少,新建config.win32.h文件,添加下面两行:
#define SIZEOF_LONG 4  
#define PHP_COMPILER_ID "VC11"

第二行的VC11版本不是根据VS2010的VC10版本,而是要与windows二进制包中的php5ts.lib编译使用的VC版本一致,下面会讲php5ts.lib。
(2)再次编译,提示缺少php5ts_debug.lib
php5ts.lib来自同版本php二进制包dev/目录下php5ts.lib文件,php5ts_debug.lib对应php debug包dev下的php5ts_debug.lib文件。
(3)再次编译,可能会提示“无法解析的外部符号”
这种错误在C++中很常见,一般都是.lib库没有正确包含了,你会发现前面已经包含了php5ts.lib文件,这里出错的原因就是php5ts.lib是64位lib包,将VS2010编译方式改成x64即可顺利编译。因此不建议使用VC++6.0,直到VS2005微软才支持x64编译方式。

  • step3:编译dll生成在TS_Release或TS_Debug目录下

Windows下配置环境事项:

  1. 建议安装Visual Assist X插件,智能智能提示非常强大;
  2. 注意php binary包的VC编译器版本及编译位数(32/64);
  3. VS的编译方式也要与php binary包编译方式保持一致(Release/Debug);
  4. 列表项目config.win32.h需要改成binary VC编译器版本;

后记:
我自己经历的学习PHP的过程是PHP基础学习、然后结合PHP框架(如Yii、CI等)做项目。 自己也用PHP做过几个项目,PHP语法层面已经比较熟悉,Ci框架用的比较多。框架更多的体现的是设计模式,统一开发规范、避免重复造轮子,没有项目的结合,单纯的看框架教程没什么意义。众所周知,PHP开发效率高,项目庞大了之后性能倒成了瓶颈,各种优化方法也很多。使用PHP扩展是解决性能瓶颈非常有效的方法,除此之外在扩展中引入多线程、epoll模型、Opencv都非常方便。虽然扩展开发非常有用,PHP开发入门比较容易,估计大部分PHP程序员都没有使用过,还是停留在框架使用层面,扩展开发更接近Zend虚拟机底层实现,使用C语言开发,对C/C++没有一定的工程调试经验,对操作系统及数据结构没有一定的理解学习起来确实很困难。后续文章会陆续介绍PHP生命周期、内核变量、HashTable实现、内存管理、ZendAPI及实际扩展开发DEMO。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_阅读 1,765评论 0 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,571评论 25 707
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,669评论 0 27
  • C++调用python 在C/C++中嵌入Python,可以使用Python提供的强大功能,通过嵌入Python可...
    Bruce_Szh阅读 13,524评论 1 7
  • 个人品牌自由职业横行的时代 会写作是人人必备的技能 所以我想说:你值得拥有 写作并非全靠天赋 而是有技可寻 全天干...
    O檬阅读 485评论 0 0