微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > APPWeb+PHP5+SQLite3在S3C6410上移植

APPWeb+PHP5+SQLite3在S3C6410上移植

时间:11-10 来源:互联网 点击:

件,确保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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top