如何使用C++开发PHP扩展(下)

上文中介绍了使用C++编写简单PHP扩展的方法,但是更多的情况是业务中已经有独立的 api 库,形式为 libxxx.a / libxxx.so,PHP程序中需要调用这些 api,所以这时就要编写PHP扩展来实现。这时是使用静态库 libxxx.a ,还是使用 libxxx.so 呢 ?常见的做法是使用静态库 libxxx.a ,下面一步一步介绍:

阅读剩余部分...

18
Jan 2014
AUTHOR WiFeng
CATEGORY C/C++,Web
COMMENTS 5 Comments

如何使用C++开发PHP扩展(上)

目前,PHP编程语言也是相当成熟,各种文档,各种问题,只要Google一下,总有你想要的答案。当然“如何开发PHP扩展”的文章也不少,但是很少有专门来介绍使用C++开发PHP扩展的介绍。C++编程语言功能的强大,促使好多公司后台程序选择使用它,因此碰到的大多数情况是需要我们用C++来扩展 PHP。PHP源码中的扩展骨架工具,默认生成的是支持 C 语言,如果要使用C++开发,有些参数需要另行配置。下面将用一个简单的示例来说明。

阅读剩余部分...

16
Jan 2014
AUTHOR WiFeng
CATEGORY C/C++,Web
COMMENTS No Comments

编译PHP扩展的两种方式

编译的两种方式其实很简单,这里记录只是为了以后遇到这种情况时不加思索地运用上,而不是花费一些时间去回忆。

C/C++程序编译有两种方式:动态编译、静态编译。PHP 是使用 C/C++程序开发的一门脚本语言,其扩展编译也就脱离不了前面提到的两种,动态、静态。站在PHP程序的角度,动态编译就是扩展生成一个 .so 文件,然后在 php.ini 中加载这个 .so 文件,此时即可调用其中的函数或者是类方法;静态编译就是在安装 PHP 时把其扩展文件内容编译到 PHP 内部,然后不需要做任何事情,就可以直接调用其中的函数或者还是类方法。这二者有什么优缺点呢?采用静态编译方式,程序在调用其函数/类方法时要快一些;采用动态编译方式,在有新扩展需要添加到PHP中时不需要重新编译PHP,只需要编译该扩展下的文件,然后把 .so 文件引入即可。二者均有利弊,使用时视情况而定是最好的方法。下面用Linux 平台下的操作来说明其编译过程。

阅读剩余部分...

8
Dec 2013
AUTHOR WiFeng
CATEGORY C/C++,Web
COMMENTS No Comments

安装php扩展:Xdebug

之前一直没有使用xdebug,程序依然跑的飞快。但是对于底层怎么解析、处理写的这些php程序呢?不知道。xdebug或许可以对你有帮助。

xdebug 是 php的一个扩展库,需要专门安装才可以使用。以下介绍windows平台的安装过程。

1、下载xdebug扩展
打开 http://xdebug.org/download.php 。打开之后发现版本很多很多,但是不能随意使用,需要根据自己的php与操作系统等等环境决定。
再打开这个页面:http://xdebug.org/wizard.php 里面全部是英文,但不要畏惧,还是比较易懂的。大概意思就是:把你的phpinfo信息粘贴到那个文本框中,然后点击下面的 “Analyse my phpinfo() output” 这个按钮,然后它就会根据你的开发环境信息建议你安装什么版本了。
注意:
a. 不能粘贴通过浏览器打印phpinfo()信息后,查看到的html源码。看到打印出的信息之后直接复制即可。
b. 点击“Analyse my phpinfo() output”按钮之后,在生成的建议信息中注意下面几项:
Xdebug installed: 2.0.5 
Windows: yes - Compiler: MS VC6 - Architecture: x86 
PHP Version: 5.2.5
如果 xdebug 项为 No , 说明还没有安装,如果后面接着是 Installed 说明已经安装过了,不需要再安装。
还有关键性的就是 windows 项与 php version 项。VC6, 要根据这个参数来找对应的版本。
然后再回到 download 页面寻找对应的扩展包。根据上面的信息我找到了一个 “PHP 5.2 VC6 TS (32 bit) (MD5: 2fda6a9d67eb1b4d09a6dc6b23f09ab0)”。有人说,如果php版本是5.2及以下的是需要带“_TS”的xdebug版本,本人没有测试过,也不知道这个“_TS”是什么意思。

2、把下载到的扩展包放到 php 的扩展库目录下,比如我的是 D:\wamp\php\ext\ 

3、找到php运行时加载的 php.ini 文件,然后在最低端添加如下的配置项:

;载入Xdebug,根据上一步的目录决定
zend_extension_ts="D:\wamp\php\ext\php_xdebug-2.0.5-5.2.dll"

;xdebug配置
[Xdebug]
;开启自动跟踪
xdebug.auto_trace = On
;开启异常跟踪
xdebug.show_exception_trace = On
;开启远程调试自动启动
xdebug.remote_autostart = On
;开启远程调试
xdebug.remote_enable = On
;收集变量
xdebug.collect_vars = On
;收集返回值
xdebug.collect_return = On
;收集参数
xdebug.collect_params = On

如果php版本是5.2及以下版本需要是 zend_extension_ts 这个配置选项,如果是 5.3 及以上版本需要是 zend_extension。依然不知道为什么?不过可以肯定5.2.5版本确实是如此,更低的版本与更高的版本没有测试过,“_ts” 是何物?

4、验证是否安装成功。(需要重新启动apache,或者是php-fpm
依然根据phpinfo() 输出信息查看。
接着根据运行一段代码验证,如果运行输出结果说明安装成功,如果出现异常说明安装失败。

<?php
$a = "new string";
$b = &$a;
$a = null;
xdebug_debug_zval( 'a' );
xdebug_debug_zval( 'b' );
?>


12
Feb 2012
AUTHOR WiFeng
CATEGORY Web,Asset
COMMENTS No Comments