PHP:扩展编译Windows/Linux
PHP的编译方式分为:静态编译,动态编译
在window下
只能通过加载dll动态链接库的方式进行功能扩展,dll文件必须与当前的版本吻合,如:具体版本号,ts或nts,vc6或vc9
#首先安装cygwin #下载php的源码,需要和安装环境中的php版本一致 #修改源码目录下的ext_skel_win32.php,如果是cygwin默认安装,可以不用修改 $cygwin_path = ‘c:\cygwin\bin’; #在命令行执行 ${php_install}\php.exe ${php_souce}/ext/ext_skel_win32.php –extname=extend_name #生成扩展框架,用于生成dsp文件用于编译,如果已有扩展代码,直接放置在该目录下
一些可能发生的错误
- #../main/config.w32.h': No such file or directory
- #需要本机编译php源码
- #下载http://www.php.net/extra/bindlib_win32.zip
- #下载http://www.php.net/extra/win32build.zip
- #全部解压在${php_source}/win32/build,并将该目录设置为环境变量
- #在命令行运行${php_source}/buildconf.bat
- #在命令行运行${php_source}/configure.bat
- #会在${php_source}/main下生成config.win32.h这个文件
- 用visual studio2010会报错,找不到cl.exe
- 使用vistual studio2010提供的命令行工具,再次执行命令即可
- 或C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat
- 如果想要No Thread Safe 模式就在上面的命令最后加上参数 --disable-zts
- config.w32.h 里面
#define PHP_COMPILER_ID
改成和你正在用的 PHP 编译版本相同的编译器ID,例如VC6或者VC9
在linux下
2种编译方法都可以,并且phpize就是为了动态编译而存在的
#先进入源码目录 Cd ${php_souce}/ext #生成扩展框架,如果已经有扩展代码,直接放置在该目录下 ./ext_skel –extname=extend_name #编写扩展代码 #进入扩展代码目录 ${Php_install}/bin/Phpize ./configure –with-php-config=${php_install}/php-config Make Make test #在当前目录的modules目录中已经生成extend_name.so文件 #复制该文件进入php的扩展目录 Mv modules/extend_name.so ${php_install}/lib/extensions/ #编辑php配置文件,加载该扩展 Extension=”extend_name.so” #直接安装 Make install #重启php进程,让该模块生效