Php5 ARM 移植

ARM 276浏览

Php5 移植

 

参考的资料

http://kernel.blog.51cto.com/920538/648057

BOA的移植不存在太大问题,就不多说了,需要在网上找一下,倒是在移植PHP时存在较多问题,下面把成功的过程说一下。

PHP用的是5.2.17没有用最新的,最新的编译有点问题,用的前一个稳定版本。

1、下载php-5.2.17.tar.bz2

2、解压到/vptemp

    #tar -jxv -f php-5.2.17.tar.bz2 -C/vptemp

3、编译

# cd /vptemp/php-5.2.17

#CC=arm-linux-gcc ./configure --host=arm-linux--prefix=/opt/php5 --disable-all --enable-pdo --with-sqlite3 --with-sqlite--with-pdo-sqlite --with-zlib --without-iconv

在做这个配置的时候出点问题,不知道为什么CC=arm-linux-gcc就是不对,配置出来的Makefile里面还是gcc,libtool也完全不对,气死了。重启机子又折腾了半天,竟然不知道怎么弄的又可以起作用了。

#make

make的时候出现:undefined reference todlopen、undefined reference to dlclose,解决方法:在makefile中EXTRA_LIBS之后加上-ldl

4、安装

#make install

将PHP源码包中php.ini-dist文件复制到/opt/php5/lib下并改名为php.ini,因为指定了prefix,PHP缺省会去/opt/php5/lib下找php.ini

5、下载到Tiny6410

#cd /opt

#tar -jcv -f php5-e.tar.bz2 php5

将/opt/php5-e.tar.bz2文件件拷贝到arm板上的/opt目录下,解压:

#tar -jxv -f php5-e.tar.bz2 -C /opt

6、配置BOA

要让BOA能够通过CGI执行PHP,修改/etc/boa/boa.conf,修改

CGIPath为:CGIPath /bin:/opt/php5/bin

最后添加一行:

AddType application/x-httpd-cgi php

7、测试

在/www建立test.php

#!/opt/php5/bin/php
<?php
echo "X-Powered-By: PHP/5.2.17n";
echo "Content-type: text/htmlnn";
?>
<html>
<body>
Hello!
<?php
echo $_SERVER["QUERY_STRING"];
?>

</body>
</html>

在浏览器中可以打开!

注意:

按上述弄好以后,在命令行下执行php-cgi完全正常,但写成脚本就是不行,最后发现只能用php,即脚本最前面一行必须是:

#!/opt/php5/bin/php

而不能是

#!/opt/php5/bin/php-cgi

那么每个文件最前面必须用下面几行返回必须的文件头了:

<?php
echo "X-Powered-By: PHP/5.2.17n";
echo "Content-type: text/htmlnn";
?>

本来这个可以由php-cgi完成就可以了,但是现在必须自己做一下了。

这可以我经过半下午才总结出来的呀,不知道什么地方的毛病呢!

 、、、、

按照上面做也没出现啥问题。

但是,_GET _POST 这两个全局变量一直不能用。(我换了好几个版本,不知道是不boa的问题),那如何传参呢,只能通过$_SERVER["QUERY_STRING"]了

$str=$_SERVER["QUERY_STRING"];                      

parse_str($str,$_GET);  

//函数参考地址http://blog.sina.com.cn/s/blog_7cfbd7bb0100qdov.html

 

自能这么干了,前提在自能使用get 方式。

还有在php的开始必须打两个空行

3、对于sqlite3的支持

它默认支持的是sqlite2 ,要使用sqlite3 要通过pdo的方式

参考地址

http://www.kelvinvt.com/Design/ShowArticle.asp?ArticleID=1225

4、支持xml

首先要安装

Libxml2

http://blog.csdn.net/fyyy4030/article/details/7244003

我使用的2-2.7.8 编译提示有错误后来改为 2-2.7.2

加入之后php中还是不能使用

就使用c程序验证 参考http://www.blogjava.net/wxb_nudt/archive/2012/03/06/161340.html#371331

直接使用arm-linux-gcc 编译出错

后来加入-L/usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/-lxml2

-I/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/libxml2

后c程序能够使用

之后试着在php的编译命令中加入--with-libxml-dir=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/libxml2   结果还是不行

于是就去查生成的makefile 发现没有将xml的头文件和库加入,于是修改makefile后可以使用了。(那如何在编译时指定目录呢?)

5 、加入socket 支持

--enable-sockets

此时编译出错

error: impossible constraint in 'asm'

百度一下发现http://hi.baidu.com/leo1989f/blog/item/7e6e49087723d11eb3351d69.html

但是如何指定交叉编译的头文件呢?我记得我写socket的时候也没特别指定呀,莫非编译器自己找的/.

于是makefile 中指定搜索的头文件  /usr/include 删除,这样编译就可以通过了,

最终的是这样的

CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc-4.3.2./configure --host=arm-linux --prefix=/opt/php5 --enable-pdo --with-sqlite3 --

with-sqlite --with-pdo-sqlite --with-zlib--with-iconv  --enable-iconv--enable-mbstring=cn --enable-track-varscn --enable-

libxml   --with-libxml-dir=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/libxml2  --enable-sockets --enable-fastcgi  --

enable-zend-multibyte --enable-soap