您的位置 首页 动态

在ARM Linux上运用Apache+PHP

相信这篇文章同样是国内很难搜到的一个HOWTO(,截至到我写出来之前),我的最初目的是在ARM上使用PHP,尝试了Busybox的httpd,以及boa都没…

信任这篇文章相同是国内很难搜到的一个HOWTO(,到到我写出来之前),我的开端意图是在ARM上运用PHP,尝试了Busybox的httpd,以及boa都没有方法很便利的和PHP接口,因而我狠下心来,编译了Apache。在ARM上运用PHP,优点仅仅是脚本比cgi好写一些,支付的价值是速度和蜗牛相同慢,不要盼望很多人一同拜访能够呼应得过来。
别的说件事,BLOG上的文章多了,常常发现有人转载,可是有的人却不注出处……莫非要我吧我的姓名和邮件地址写到文章的每一个部分吗?或许国人便是这样缺少某种精力,在我看到的转载我文章的BLOG中,根本都是网上各种ARM Linux文章的调集,不行否认他们收集的很好,可是看了这么多文章,连一点心得体会都没有么,写点原创的东西就这么难么?不管怎样,我仍是坚持EE小站的风格——原创性。下面开端正题,本文分为三大部分,apache、php和装备。

编译apache
下载apache 1.3.39(1.3.41有些bug,没有方法穿插编译)
下载地址http://apache.mirror.phpchina.com/httpd/apache_1.3.39.tar.bz2

穿插编译apache总体上需求两个进程:
1.编译本机代码
2.运用本机代码进行穿插编译

这是由于编译apache时,需求运用编译生成的东西制造后续编译运用的头文件,穿插编译的东西当然没有方法在PC上运转,因而,需求借用本机编译生成的东西。假定为本机编译的apache代码现已解压缩到/home/lxz/apache-1.3.39-i586,为ARM编译的apache代码现已解压缩到/home/lxz/apache-1.3.39,穿插编译器arm-linux-gcc已设缺省途径,具体进程仍是用指令来阐明:

# cd /home/lxz/apache-1.3.39-i586
# ./configure

由于仅仅是借用下本机代码,所以不必设置装备参数,然后编译

# make

等编译完成后,就能够装备穿插编译的apache了。apache的装置方位为/usr/local/apache

# cd /home/lxz/apache-1.3.39
# CC=arm-linux-gcc ./configure –prefix=/usr/local/apache

会出来这样的提示,由于穿插编译的生成的testfunc这个东西不能在PC上履行,但能够不理睬它
./helpers/TestCompile: line 294: /home/lxz/apache-1.3.39/src/helpers/testfunc: cannot execute binary file
翻开/home/lxz/apache-1.3.39/src/main/Makefile这个文件,找到这两段代码
uri_delims.h: gen_uri_delims
./gen_uri_delims >uri_delims.h
test_char.h: gen_test_char
./gen_test_char >test_char.h
修正为
uri_delims.h: gen_uri_delims
/home/lxz/apache-1.3.39-i586/src/main/gen_uri_delims >uri_delims.h
test_char.h: gen_test_char
/home/lxz/apache-1.3.39-i586/src/main/gen_test_char >test_char.h
这儿借用了方才编译生成的本机代码里的东西,然后

# make

这就编译好了,下面是装置。由于装备apache的时分“prefix”参数指定的装置方位是/usr/local/apache,在PC上,拜访/usr/local是需求有root权限的,需求切换到root用户来进行装置。不主张将apache装置到一个随意的目录然后复制,由于这样会形成apache中的脚本调用方位的过错。当然,假如想要将apache装置到一个PC和ARM Linux都能拜访的固定方位,如/home/lxz/apache也能够。
假如你不明白上面这段话在说什么,那么请按照下面的进程进行操作。请承认你的PC Linux上的/usr/local/apache这个目录不存在PC上运用的apache,不然下面的进程会使你PC Linux上的apache不行用。

# su root

输入暗码

# cd /home/lxz/apache-1.3.39/
# make install
# exit

别忘了用exit退出root用户形式,这样,apache的文件就被装置到PC上的/usr/local/apache了。接下来所要做的是将apache复制到ARM Linux根文件体系,假定ARM Linux根文件体系在PC上的方位为/home/lxz/root,其间现已有/usr/local这个目录

# cp -r /usr/local/apache /home/lxz/root/usr/local

假如是一路看着我的BLOG树立起根文件体系的,接下来还必须树立nobody用户和nogroup组,由于apache回绝运用root用户运转。具体来说便是在ARM Linux根文件体系上树立/etc/passwd和/etc/group两个文件,怎样写这两个文件,能够google下。它们的内容能够如下:

/etc/passwd
root::0:0:root:/:/bin/ash
nobody::65534:65533:nobody:/:/bin/ash
/etc/group
nobody::65533:
nogroup::65534:nobody
root::0:
users::100:
当然,假如你的ARM Linux根文件体系中有这两个文件,那么你需求检查一下是不是有nobody用户和nogroup组。接下来,能够制造文件体系映像并测验apache是否能够正常作业了,仍是用指令来阐明。

# mkfs.cramfs /home/lxz/root /home/lxz/root.img

我一向用cramfs,SUSE 10.2自己就带了mkfs.cramfs这个东西。烧写或许加载文件体系映像的进程我就不说了,需求留意的是假如你运用了不行写的文件体系,如cramfs,需求把apache的日志途径挂载为临时文件目录,下面这几条指令在ARM Linux上履行。

# mount -t tmpfs tmpfs /usr/local/apache/log

然后就能够发动apache了

# cd /usr/local/apache/bin
# ./apachectl start

假定ARM板的ip地址是192.168.5.118,在浏览器里输入http://192.168.5.118:8080拜访ARM板(不修正默许装备,服务端口是8080)。apache的装备一瞬间编译了php再说。

编译php
首要下载php-4.4.8,下载地址:http://cn2.php.net/get/php-4.4.8.tar.bz2/from/this/mirror

穿插编译php相同需求两个进程:
1.编译本机代码
2.运用本机代码进行穿插编译

原因我就不重复了,假定为本机编译的php代码现已解压缩到/home/lxz/php-4.4.8-i586,为ARM编译的php代码现已解压缩到/home/lxz/php-4.4.8,穿插编译器arm-linux-gcc已设缺省途径,具体进程仍是用指令来阐明:

# cd /home/lxz/php-4.4.8-i586
# ./configure
# make

在编译的一同,能够翻开/home/lxz/php-4.4.8/configure这个文件,查找“can not run test program while cross compiling”,会查找到很多个这样的成果:
{ echo “configure: error: can not run test program while cross compiling” 1>&2; exit 1; }
把它们都改为
{ echo “configure: error: can not run test program while cross compiling” 1>&2; }
这样做的意图是直接无视穿插编译测验程序过错。别的,我运用的是arm-linux-gcc 3.4.1版,和代码不太兼容。找到/home/lxz/php-4.4.8/Zend/zend_strtod.c的第238行
#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + \
defined(IBM) != 1
Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or
IBM should be defined.
#endif
把这段改为
#if defined(IEEE_LITTLE_ENDIAN) + defined(IEEE_BIG_ENDIAN) + defined(VAX) + \
defined(IBM) != 1
//Exactly one of IEEE_LITTLE_ENDIAN IEEE_BIG_ENDIAN, VAX, or
//IBM should be defined.
#endif
在本机php编译完后,输入如下指令

# cd /home/lxz/php-4.4.8
# CC=arm-linux-gcc ./configure –prefix=/usr/local/php –host=i586-suse-linux –target=arm-linux

别以为能够编译了,还有东西要修正,真汗啊……翻开/home/lxz/php-4.4.8/Makefile,找到这段
install-pear-packages: $(top_builddir)/sapi/cli/php
@$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) /home/lxz/php-4.4.8/pear/install-pear.php -d “$(peardir)” -b “$(bindir)” /home/lxz/php-4.4.8/pear/packages/*.tar
用上咱们方才编译的本机php里的文件,把它改成
install-pear-packages: /home/lxz/php-4.4.8-i586/sapi/cli/php
@/home/lxz/php-4.4.8-i586/sapi/cli/php $(PEAR_INSTALL_FLAGS) /home/lxz/php-4.4.8/pear/install-pear.php -d “$(peardir)” -b “$(bindir)” /home/lxz/php-4.4.8/pear/packages/*.tar
总算能够编译了

# make

随后和apache相同,需求切换用户,把php的文件装置到/usr/local/php

# su

输入暗码

# cd /home/lxz/php-4.4.8
# make install
# exit

这样,php就编译完成了。

装备Apache和PHP
接下来就需求修正装备文件,让apache和php能够链接起来作业。这个装备进程和Windows下运用apache+php的进程相似,由于我不是把apache和php一同编译的,仅仅让apache知道“.php”这个扩展名,然后调用php。为了便利,直接给出apache的装备文件,装备文件的方位在ARM Linux文件体系的/usr/local/apache/conf/httpd.conf,其间赤色字是在默许装备文件基础上修正或增加的内容。
ServerType standalone
ServerRoot “/usr/local/apache”
PidFile /usr/local/apache/logs/httpd.pid
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 0
Port 80
User nobody
Group nobody
ServerAdmincosine@126.com
DocumentRoot “/home/webroot”

Options FollowSymLinks
AllowOverride None


Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all


UserDir public_html


DirectoryIndex index.html
DirectoryIndex index.php
DirectoryIndex index.php3
DirectoryIndex index.phtml

AccessFileName .htaccess

Order allow,deny
Deny from all
Satisfy All

UseCanonicalName On

TypesConfig /usr/local/apache/conf/mime.types

DefaultType text/plain

MIMEMagicFile /usr/local/apache/conf/magic

HostnameLookups Off
ErrorLog /usr/local/apache/logs/error_log
LogLevel warn
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common
LogFormat “%{Referer}i -> %U” referer
LogFormat “%{User-agent}i” agent
CustomLog /usr/local/apache/logs/access_log common
ServerSignature On

Alias /icons/ “/usr/local/apache/icons/”

Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all

Alias /manual/ “/usr/local/apache/htdocs/manual/”

Options Indexes FollowSymlinks MultiViews
AllowOverride None
Order allow,deny
Allow from all

ScriptAlias /cgi-bin/ “/usr/local/apache/cgi-bin/”
ScriptAlias /php4/ “/usr/local/php/bin/”
# 留意 “/usr/local/php/bin/” 中最终一个”/”不行少

AllowOverride None
Options None
Order allow,deny
Allow from all



IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
ReadmeName README.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t


AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .ee
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage he .he
AddCharset ISO-8859-8 .iso8859-8
AddLanguage it .it
AddLanguage ja .ja
AddCharset ISO-2022-JP .jis
AddLanguage kr .kr
AddCharset ISO-2022-KR .iso-kr
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddCharset ISO-8859-2 .iso-pl
AddLanguage pt .pt
AddLanguage pt-br .pt-br
AddLanguage ltz .lu
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .sv
AddLanguage cs .cz .cs
AddLanguage ru .ru
AddLanguage zh-TW .zh-tw
AddCharset Big5.Big5.big5
AddCharset WINDOWS-1251 .cp-1251
AddCharset CP866.cp866
AddCharset ISO-8859-5.iso-ru
AddCharset KOI8-R.koi8-r
AddCharset UCS-2.ucs2
AddCharset UCS-4.ucs4
AddCharset UTF-8.utf8

LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw

AddType application/x-tar .tgz
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz

Action application/x-httpd-php “/php4/php”

BrowserMatch “Mozilla/2” nokeepalive
BrowserMatch “MSIE 4\.0b2;” nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch “RealPlayer 4\.0” force-response-1.0
BrowserMatch “Java/1\.0” force-response-1.0
BrowserMatch “JDK/1\.0” force-response-1.0

php也有装备文件,可是修正起来比较简单,只需求把/home/lxz/php-4.4.8/php.ini-dist到ARM Linux文件体系的/usr/local/php/lib,并改名为php.ini,找到
register_globals = Off
修正为
register_globals = On
保存就能够了。
假如你觉得上面的全部都很费事,能够在EE小站的SkyDrive下载我制造好的压缩包,地址http://cid-4201fdc93932ddaf.skydrive.live.com/self.aspx/EE小站琐碎文件/armv4-apache-php.tar.bz2,解压缩到ARM Linux根文件体系的/。这个压缩包包括apache 1.3.39和php 4.4.8,默许的网页服务器根目录为/home/webroot,默许监听端口为80。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/277196.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部