APPWeb+PHP5+SQLite3在S3C6410上移植
件,确保CC和CPP等环境变量指向交叉编译链,即arm-linux-xx,以及相关库文件和头文件的路径是否正确,正确配置信息如下图所示:
配置成功之后,系统提示如下信息:
编译安装:
make clean
make
make install
编译时如果出现如下错误,表示编译PHP的工具链并不是arm-linux-gcc而是gcc,所以需要重新设置CC、AR等环境变量指向arm-linux-xx交叉工具链。
编译成功,系统提示信息如下:
注意:编译完成后不可执行make test,因为PHP编译的目标为网关(ARM平台),所以运行时会报错。直接运行makeinstall进行安装即可。
安装完成后,在libs/目录下生成libphp5.so动态库文件,使用file命令查看文件信息,如下所示:
在未使用strip工具去除调试信息之前,本次编译的库文件大小为12.5M,执行arm-linux-strip得到的库文件大小仅为3.8M。编译PHP加速器eAccelerator
eAccelerator是一款开源PHP加速器,优化动态内容缓存,提高php脚本的缓存性能,使PHP脚本在编译的状态下,对服务器的开销几乎完全消除;另外,可以实现脚本优化,加快脚本执行速率,最终使PHP程序代码执行效率提高1至10倍。
eAccelerator-0.9.5版本支持PHP进行交叉编译,但是该版本不支持动态模块加载方式,只能将eaccelerator编译进libphp5.so动态库中。
将解压得到的eaccelerator-0.9.5目录重命名为eaccelerator,并复制到php-5.2.17/ext目录下,进入该目录,使用phpize工具生成configure文件,phpize是安装PHP时自动生成的工具,默认安装于/usr/local/bin目录下。
/usr/local/bin/phpize
执行成功后,系统提示信息如下:
将php-5.2.17/目录下的configure文件删除,使用buildconfig工具重新生成包含eaccelerator编译选项的configure文件。首先,系统必须安装了autoconf-2.13工具,若未安装,可以通过apt-get工具自动安装。执行下述命令:
apt-getinstall autoconf-2.13
rm configure
./buildconf --force
生成的configure文件包含了eaccelerator的配置语句--enable-eaccelerator。
重新执行PHP配置命令,并在最后加上--enable-eaccelerator参数。执行make时将出现如下错误:
该错误可通过下述方法进行修改:
修改eaccelerator目录下mm.c文件,在文件开始处加入如下语句:
#defineMM_SEM_IPC 1
#defineMM_SHM_IPC 1
设置完成后,重新编译安装eAccelerator,问题解决。
要使PHP能够运行eAccelerator,首先,需要修改php.ini配置文件,并加入eaccelerator的配置信息,在该文件最后添加如下语句:
extension= eaccelerator.so
;eAccelerator
eaccelerator.shm_size= "16"
eaccelerator.cache_dir= "/tmp/eaccelerator"
eaccelerator.enable= "1"
eaccelerator.optimizer= "1"
eaccelerator.check_mtime= "1"
eaccelerator.debug= "0"
eaccelerator.filter= ""
eaccelerator.shm_max= "0"
eaccelerator.shm_ttl= "0"
eaccelerator.prune_period= "0"
eaccelerator.shm_only= "0"
eaccelerator.compress= "1"
eaccelerator.compress_level= "9"
最后,在网关/tmp/目录下创建用于存放eAccelerator缓存文件的目录eaccelerator,并修改该目录权限为777。
4PHP外部C扩展
使用PHP的外部C扩展将实现与外部库(C库)的交互,另外,可以改善PHP脚本执行效率的问题。通常采用以下3种方式实现C扩展:
l Built-in Modules编译进PHP
好处: (1)不需要动态加载,模块在php脚本里面可以直接使用.
(2)不需要将模块编译成.so共享库,因为直接编译进PHP。
缺点: (1)对模块的改变都需要重新编译PHP
(2)因为编译进PHP,所以PHP二进制文件较大,而且多占点内存
l External Modules外部模块,也就是编译成共享库,用dl()函数动态加载。
好处:(1)不需要重新编译 PHP
(2)PHP体积小,因为不需要编译进PHP
缺点:(1)每次*.php脚本执行都需要用 dl()去加载,效率较低
(2)每次都要调用dl()
l The Zend EngineZend 核心里实现
下面介绍第一种C扩展方式Built-in Modules。
创建C扩展框架
PHP本身提供一个创建扩展框架的工具ext_skel,该工具会生成PHP扩展必须的基本代码,位于PHP源码的ext/目录下。创建一个名为test的扩展库,完成之后,将会生成config.m4、test.c、php_test.h等文件。
cd/home/username/share/php-5.2.17/ext/
./ext_skel--extname=test
cdtest
修改扩展库
修改config.m4文件,该文件是一个宏解释工具,将输入文件中的宏展开到输出文件,是PHP扩展框架所必须的,用来生成扩展所需的makefile文件。
将源码文件中的如下代码:
dnlPHP_ARG_ENABLE(test, whether to enable test support,
dnl Make su
APPWebPHP5SQLite3S3C641 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)