<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 在ARM Linux上使用Apache+PHP

          在ARM Linux上使用Apache+PHP

          作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          相信這篇文章同樣是國內(nèi)很難搜到的一個HOWTO(,截至到我寫出來之前),我的最初目的是在ARM上使用PHP,嘗試了Busybox的httpd,以及boa都沒有辦法很方便的和PHP接口,因此我狠下心來,編譯了Apache。在ARM上使用PHP,好處僅僅是腳本比cgi好寫一些,付出的代價是速度和蝸牛一樣慢,不要指望很多人同時訪問可以響應(yīng)得過來。
          另外說件事,BLOG上的文章多了,經(jīng)常發(fā)現(xiàn)有人轉(zhuǎn)載,但是有的人卻不注出處……難道要我吧我的名字和郵件地址寫到文章的每一個部分嗎?也許國人就是這樣缺乏某種精神,在我看到的轉(zhuǎn)載我文章的BLOG中,基本都是網(wǎng)上各種ARM Linux文章的集合,不可否認(rèn)他們搜集的很好,但是看了這么多文章,連一點心得體會都沒有么,寫點原創(chuàng)的東西就這么難么?不管怎樣,我還是堅持EE小站的風(fēng)格——原創(chuàng)性。下面開始正題,本文分為三大部分,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.編譯本機(jī)代碼
          2.利用本機(jī)代碼進(jìn)行交叉編譯

          這是因為編譯apache時,需要使用編譯生成的工具制作后續(xù)編譯使用的頭文件,交叉編譯的工具當(dāng)然沒有辦法在PC上運行,因此,需要借用本機(jī)編譯生成的工具。假設(shè)為本機(jī)編譯的apache代碼已經(jīng)解壓縮到/home/lxz/apache-1.3.39-i586,為ARM編譯的apache代碼已經(jīng)解壓縮到/home/lxz/apache-1.3.39,交叉編譯器arm-linux-gcc已設(shè)缺省路徑,具體步驟還是用命令來說明:

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

          因為僅僅是借用下本機(jī)代碼,所以不用設(shè)置配置參數(shù),然后編譯

          # make

          等編譯完成后,就可以配置交叉編譯的apache了。apache的安裝位置為/usr/local/apache

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

          會出來這樣的提示,因為交叉編譯的生成的testfunc這個工具不能在PC上執(zhí)行,但可以不理會它
          ./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
          這里借用了剛才編譯生成的本機(jī)代碼里的工具,然后

          # make

          這就編譯好了,下面是安裝。由于配置apache的時候“prefix”參數(shù)指定的安裝位置是/usr/local/apache,在PC上,訪問/usr/local是需要有root權(quán)限的,需要切換到root用戶來進(jìn)行安裝。不建議將apache安裝到一個隨意的目錄然后拷貝,因為這樣會造成apache中的腳本調(diào)用位置的錯誤。當(dāng)然,如果想要將apache安裝到一個PC和ARM Linux都能訪問的固定位置,如/home/lxz/apache也可以。
          如果你不明白上面這段話在說什么,那么請按照下面的步驟進(jìn)行操作。請確認(rèn)你的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根文件系統(tǒng),假設(shè)ARM Linux根文件系統(tǒng)在PC上的位置為/home/lxz/root,其中已經(jīng)有/usr/local這個目錄

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

          如果是一路看著我的BLOG建立起根文件系統(tǒng)的,接下來還必須建立nobody用戶和nogroup組,因為apache拒絕使用root用戶運行。具體來說就是在ARM Linux根文件系統(tǒng)上建立/etc/passwd和/etc/group兩個文件,怎么寫這兩個文件,可以google下。它們的內(nèi)容可以如下:

          /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:
          當(dāng)然,如果你的ARM Linux根文件系統(tǒng)中有這兩個文件,那么你需要檢查一下是不是有nobody用戶和nogroup組。接下來,可以制作文件系統(tǒng)映像并測試apache是否可以正常工作了,還是用命令來說明。

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

          我一直用cramfs,SUSE 10.2自己就帶了mkfs.cramfs這個工具。燒寫或者加載文件系統(tǒng)映像的步驟我就不說了,需要注意的是如果你使用了不可寫的文件系統(tǒng),如cramfs,需要把apache的日志路徑掛載為臨時文件目錄,下面這幾條命令在ARM Linux上執(zhí)行。

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

          然后就可以啟動apache了

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

          假設(shè)ARM板的ip地址是192.168.5.118,在瀏覽器里輸入http://192.168.5.118:8080訪問ARM板(不修改默認(rèn)配置,服務(wù)端口是8080)。apache的配置一會兒編譯了php再說。

          編譯php
          首先下載php-4.4.8,下載地址:http://cn2.php.net/get/php-4.4.8.tar.bz2/from/this/mirror

          交叉編譯php同樣需要兩個步驟:
          1.編譯本機(jī)代碼
          2.利用本機(jī)代碼進(jìn)行交叉編譯

          原因我就不重復(fù)了,假設(shè)為本機(jī)編譯的php代碼已經(jīng)解壓縮到/home/lxz/php-4.4.8-i586,為ARM編譯的php代碼已經(jīng)解壓縮到/home/lxz/php-4.4.8,交叉編譯器arm-linux-gcc已設(shè)缺省路徑,具體步驟還是用命令來說明:

          # 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”,會搜索到很多個這樣的結(jié)果:
          { 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
          在本機(jī)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
          用上我們剛才編譯的本機(jī)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認(rèn)識“.php”這個擴(kuò)展名,然后調(diào)用php。為了方便,直接給出apache的配置文件,配置文件的位置在ARM Linux文件系統(tǒng)的/usr/local/apache/conf/httpd.conf,其中紅色字是在默認(rèn)配置文件基礎(chǔ)上修改或添加的內(nèi)容。
          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文件系統(tǒng)的/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根文件系統(tǒng)的/。這個壓縮包包含apache 1.3.39和php 4.4.8,默認(rèn)的網(wǎng)頁服務(wù)器根目錄為/home/webroot,默認(rèn)監(jiān)聽端口為80。


          關(guān)鍵詞: ARMLinuxApache+PH

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();