PHP教程.安裝PHP_PHP
最後更新:2016-06-01
來源:互聯網
上載者:User
關鍵字
安裝
教程
檔案
編譯
目錄
一個
可以
使用
命令
程式
安裝PHP
本章將按下列步驟編譯安裝以下軟體:
* Apache v.1.3.4 -- 世界上最流行的Web伺服器。
* gcc v.2.8.1 -- 來源於GNU的C和C++編譯器。
* MySQL v.3.22.16b-gamma -- 世界範圍內許多人使用的資料庫。
* PHP v.3.0.11 -- 本書所主要介紹的軟體。從http://www.php.net(或此網站的鏡象網站)直接下載可以得到較新的版本。本章的其它步驟仍然適用。
* expact -- 用於讀取和處理XML文檔的函數庫。
* phplib -- 用於進行會話管理的PHP函數庫。
* libiodbc -- 主要用於存取在非UNIX電腦中資料庫的ODBC函數庫。
* MyODBC -- PHP、iODBC和MySQL之間的函數庫。
即便如此,本章也並不是介紹編譯應用程式所需要的那些指令,而只是簡單的進行描述。總之,本書的重點是介紹PHP語言,而不是C語言。每一個應用程式的編譯對我來說都十分清楚,希望每個讀者也能沒有困難的進行編譯。假如你確實碰到了一些問題,可以在某個IRC頻道中有禮貌的詢問,或者可以嘗試使用新聞群組(可以從http://www.dejanews.com訪問)得到協助來解決問題。然而,最好的協助還是來自http://www.php.net 上的PHP郵件清單。
在開始編譯過程之前,讓我們先討論一下如何從錯誤中恢複。在得到有關錯誤的協助以後,可以採用以下的命令重新初始化源碼目錄:
* rm config.cache--幾乎所有的Linux應用程式都使用configure命令來檢查自己的系統,以尋找有關如何剪裁編譯過程的資訊。檢查的結果將存貯在一個名為config.cache的檔案中。如果移走此檔案,將迫使配置程式從頭開始重新檢查系統。
* make distclean--所有的用C語言編寫的Linux應用程式都是用make程式編譯的。make程式會尋找每一個源檔案,以確認是需要編譯還是已經編譯過的。make distclean命令可以“重設”所有的來源程式,以便能重新編譯它們。
* make clean--有的應用程式不支援make distclean命令,而用make clean命令來代替。make clean命令“重設”所有的來源程式,以便能重新編譯它們。
即使要安裝的一些應用程式不支援以上的每個命令,但是試一下這些命令也不會有什麼害處。
注意:Red Hat v5.2使用glibc庫。如果使用者從互連網中下載或更新在本章中安裝的程式時,必須知道glibc的資訊。使用者可以使用rpm -q glibc命令來查出已經安裝的glibc庫的版本號碼。在作者的系統中,使用rpm -q glibc命令將顯示glibc-2.0.7.29。
2.1 基本概念
也許讀者以前從沒有編譯過Linux應用程式,在這裡介紹一些基本概念,以便在出現問題時有可能診斷出問題所在。
tar
tar,即tape archiver,它可以把幾個檔案組合成一個檔案,並可以選擇是否進行壓縮。這個命令過去通常用來進行備份,以便使資料存放區在磁帶中。當tar檔案被壓縮時,它們有一個.gz的尾碼;當tar檔案沒有壓縮時,它們有一個.tar的尾碼。
gcc
gcc 是GNU的C編譯器。它的工作是把人可以看懂的原始碼檔案編譯成機器可以讀懂的目標檔案。C源檔案通常有.c的尾碼名,目標檔案通常有.o的尾碼名。如果編譯工作不能正常進行,就是碰到了一個編譯期的錯誤,或者說:語法錯誤。在大多數情況下,不徹底的編譯通常是編譯器找不到一個或幾個包含檔案而產生的。包含檔案都有一個.h的副檔名,通常用來定義不同的系統資訊,以及將多個不同的.c檔案所共有的資訊收集在一起。
make
make是一個常用的工具程式,是用來協助進行編譯的。它的工作是用來只編譯那些還沒有編譯過的源檔案。編譯.c檔案將產生一個.o檔案,如果.c檔案比.o檔案更新,也就是說到上次編譯之前,源檔案被編輯過,那麼make將會重新編譯.c檔案。make指令一般是尋找一個Makefile檔案,在這個檔案中包含有一個或多個能執行的目標,例如,make clean會告訴make執行清除目標。
ld
ld是GNU的連結程式。它的工作是把所有的目標檔案和庫連結起來,建立一個單一的可執行檔。幸運的是,基本上不用手工運行這個程式,因為Makefile將會考慮到所有的編譯細節。
ldconfig
ldconfig會為在多個庫目錄(在/etc/ld.so.conf中指定)中尋找共用庫。共用庫常被多個的應用程式使用,它們的檔案名稱中的某個地方有.so,例如,libqt.so.1.42是一個共用庫。在編譯完畢之後,有可能需要在/etc/ld.so.conf檔案中增加一個目錄,並且運行ldconfig -v命令。
./configure
configure將會在電腦中尋找一些關鍵資訊,例如,安裝的是哪一種C編譯器,包含檔案在哪裡等等。然後,configure將會按照所用的電腦配置重新修改Makefile檔案。應該使用./configure來在目前的目錄下運行程式,以避免偶然運行$PATH環境變數中的目錄下的其他程式。
符號串連
符號串連允許使用者可以為一個已經現有的檔案指定另一個不同的名字。例如,使用者有可能想把一個名為libqt.so.1.42的檔案稱為libqt.so.1。符號串連基本上可以使使用者把一個檔案複製到另一個不同的目錄下面,但事實上並沒有真正複製此檔案。第二個檔案執行個體只是簡單地指向第一個檔案執行個體。使用符號串連至少可以有兩點好處,第一點是符號串連可以節省硬碟空間,少到只有16位元組;第二點有一點微妙,讓我們先看一下一個名為libqt.so.1且指向libqt.so.1.42的符號串連。如果需要升級到libqt.so.1.88,該怎麼辦呢?使用者只要簡單地改變符號串連,使libqt.so.1指向libqt.so.1.88,而非libqt.so.1.42即可。這意味著涉及到libqt.so.1的程式將自動地使用這個庫的新版本。按照慣例,符號串連常用於完整的發布版本號碼。換句話說,libqt.so.1.88和libqt.so.2.32應該有兩個不同的動態串連(分別為libqt.so.1和libqt.so.2)。
2.2 編譯前的準備工作
以下步驟將為系統做好編譯前的準備工作。
1. mkdir /usr/local/src -- 我選用/usr/local樹作為所安裝應用程式的根目錄。其他人可能選用/usr/opt、/opt或/var目錄。為了更方便的按照本章中的指令操作,請選用/usr/local目錄作為根目錄。當編譯完成以後,使用者可以把這些檔案複製到不同的目錄中。
注意:為了能完成本章中的其它步驟,使用者必須具備root許可權。
2. cd /usr/local/src--轉到源檔案目錄下。
3. 下載以下檔案(可以從http://www.mtolive.com/phpbook網站下載),或者從本書隨機附帶的光碟片中,複製這些檔案到/usr/local/src目錄下:
. apache_1.3.4.tar.gz
. gcc-2.8.1.tar.gz
. mysql-3.22.16b-gamma.tar.gz
. php-3.0.11.tar.gz
. expat.tar.gz
. phplib.tar.gz
. libiodb-2.50.3
. myodbc-2.50.24-src
4. 使用tar命令解壓縮以上檔案。tar的x選項為解開選項,v選項將在螢幕上顯示文檔中解出來的檔案名稱,z選項為解壓縮選項,f選項用於在命令列中指定.tar檔案名稱。
tar xvzf apache_1.3.4.tar.gz
tar xvzf gcc-2.8.1.tar.gz
tar xvzf mysql-3.22.16b-gamma.tar.gz
tar xvzf php-3.0.11.tar.gz
tar xvzf expat.tar.gz
tar xvzf phplib.tar.gz
5. gcc -v
確定系統中現有gcc的版本。如果你的系統不是v2.7.2.3,在下面的操作步驟中採用你的gcc版本號碼替換v.2.7.2.3。
6. cp `which gcc` /usr/bin/gcc-2.7.2.3
如果需要,把現有的gcc備份,以便以後使用。Linux的另一個優點是可以很容易在目錄下儲存一個程式的多個版本。
7. httpd -v
確定系統中的Apache的版本號碼。如果你的系統中的Apache不是v1.3.4,在下面的操作步驟中使用你的版本號碼替換v1.3.4。
8. mv `which httpd` /usr/sbin/httpd-1.3.4
如果需要,把現有的Apache備份,以便以後使用。
2.3 編譯C編譯器gcc
使用者應該安裝、編譯器的第一個程式就是C編譯器。隨Red Hat v5.2附帶的C編譯器是gcc v2.7.2.3,由於它的版本比較低,以至於不能正確的編譯PHP。然而gcc v.2.7.3可以用來編譯版本較高的gcc v2.8.1。
編譯新版本的gcc需要執行:
1. cd /usr/local/src/gcc-2.8.1
轉到gcc的頂級目錄下。
2. ./configure -prefix=/usr/local/gcc
回合組態程式,強制安裝程式在後面的安裝過程中使用/usr/local/gcc作為gcc的安裝目錄。
3. make bootstrap LANGUAGES="c c++" BOOT_CFLAGS="-g -02"
編譯新的C和C++編譯器。
4. make install LANGUAGES="c c++" BOOT_CFLAGS="-g -02"
安裝新的C和C++編譯器。
5. mv /usr/local/gcc/bin/gcc /usr/local/gcc/bin/gcc-2.8.1
把新的gcc編譯器重新命名,使它的名字中含有版本號碼。
6. ln -s \
/usr/local/gcc/bin/gcc-2.8.1 \
/usr/bin/gcc-
給新編譯過的gcc可執行檔建立一個符號串連/usr/bin/gcc。
7. gcc -v
顯示gcc的版本號碼。如果編譯和安裝都正常的話,將顯示v.2.8.1。
2.3 編譯MySQL
現在來編譯MySQL。在編譯工作完成之後,就可以使用MySQL的應用程式來測試安裝。
1. cd /usr/src/mysql-3.22.16a-gamma
轉到MySQL的頂級目錄下。
2. ./configure --prefix=/usr/local/mysql
回合組態程式,強制安裝程式在後面的安裝過程中使用/usr/local/mysql作為MySQL的安裝目錄。
3. make
編譯MySQL。
4. make install
安裝MySQL。
5. echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
將MySQL庫所在的目錄添加進設定檔中。這樣,當Linux啟動或者執行ldconfig命令時,將會在該設定檔中的目錄裡搜尋庫檔案。
6. ldconfig -v | grep libmysqlclient
ldconfig命令能讀取/etc/ld.so.conf檔案中列出的目錄,並對在那些目錄裡找到的庫檔案進行緩衝。grep命令在ldconfig命令的大量輸出結果中尋找MySQL庫檔案,並限定文本以類似下面方式進行顯示:
libmysqlclient.so.6 => libmysqlclient.so.6.0.0.
7. echo "/usr/local/mysql/bin/safe_mysqld > /dev/null &" >> /etc/rc.d/rc.local
將MySQL啟動指令添加到/etc/rc.d/rc.local檔案中,這樣每次啟動Linux後就會自動運行MySQL。
8. ./scripts/mysql_install_db
初始化資料庫。
9. /usr/local/mysql/bin/safe_mysqld > /dev/null &
啟動MySQL伺服器作為背景程式,為了測試安裝,MySQL伺服器必須啟動。
10. ln -s \
/usr/local/mysql/bin/mysql \
/usr/bin/mysql
我比較喜歡在/usr/bin目錄下為安裝目錄建立符號連結。這一方法減少了PATH環境變數中的目錄數量,還可以將不希望其他人啟動並執行MySQL工具程式隱藏起來,(例如,mysqladmin命令)。另一方法是將命令PATH="$PATH:/usr/local/mysql/bin"放在/etc/profile檔案中。以上兩種方法都很可以採用。
11. ln -s\
/usr/local/mysql/bin/mysqlshow \
/usr/bin/mysqlshow
該指令是讓一般使用者都可以運行mysqlshow命令。
2.4 測試MySQL
在繼續Apache和PHP編譯之前,首先來測試MySQL的安裝是否成功。正式發布的MySQL帶有許多有用的工具,這裡我們只使用mysql和mysqlshow命令來進行測試。(如果對資料庫不熟悉,請不用擔心,諸如使用者、表、記錄等資料庫的概念將在第六章“資料庫和SQL”中加以介紹。)
mysqladmin的作用是建立和刪除資料庫、檢查SQL的狀態,以及其他一些用途。首先,通過檢查版本號碼以確認是否已經正確安裝了MySQL:
>PATH="usr/local/mysql/bin:$PATH"
>mysqladmin version
Ver 7.8 Distrib 3.22.16a-gamma, for pc-linux-gun on i686 TCX Datakonsult AB, by Monty
Server version 3.22.16a-gamma
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /tmp/mysql.sock
Uptime: 2 hours 30 min 39 sec
Threads: 1 Questions: 7 Slow queries: 0
Opens: 6 Flush tables: 1 Open tables: 2
可以用以下命令觀看mysqladmin的所有功能.
mysqladmin --help | less
也許mysqlshow是更讓人激動的工具,它能夠列出資料庫、表和欄位名,如下所示:
清單2.1 mysqlshow--顯示資料庫,表和欄位名清單
Page 18(第13行)-19(倒數第10行) , 清單 2.1
最後要介紹的MySQL工具是mysql,這個程式將深入到MySQL的中心,並且可以使你可以立刻在Linux命令列提示下執行SQL語句。在shell模式下運行mysql。
Page 19(倒數第5行)-20(倒數第5行)
小心:設定密碼要使用password()函數。如果需要進一步瞭解,請查閱MySQL文檔。
小心:在系統進入正常工作模式的時候,請選用一個比“password”更好的root密碼。
2.5 編譯iODBC和MyODBC
iODBC是一個實現開放性資料庫互連(Open Database connectivity)協議的函數庫。它主要用於串連運行於Microsoft Windows的資料庫引擎。
1. cd /usr/local/src/libiodbc-2.50.3
轉到iODBC目錄。
2. ./configure \
--prefix=/usr/local/iodbc \
--with-iodbc-inidir=/usr/local/etc
回合組態程式,並強制設定iODBC為安裝到目錄/usr/local/iodbc下。此外,應確認odbc的初始設定檔案為/etc/odbc.ini。
3. make
4. make install
把庫檔案複製到目錄/usr/local/iodbc/lib下,並且把包含檔案複製到目錄/usr/local/iodbc/include下。
5. cd /usr/local/src/myodbc-2.50.24
轉到MyODBC目錄下。
6. ./configure \
--prefix=/usr/local/myodbc \
--with-mysql-sources=/usr/local/mysql-3.22.16a-gamma \
--with-odbc-ini=/etc/odbc.ini \
--with-iodbc=/usr/local/iodbc
運行MyODBC配置程式。
7. make
8. make install
把庫複製到目錄/usr/local/myodbc/lib下。
2.6 編譯PHP
編譯PHP比編譯以前的應用程式更複雜,這是因為編譯PHP事實上是expat、Apache和PHP的組合。編譯的結果將產生一個帶有PHP的Apache版本。為了要編譯PHP,可以採用以下步驟:
1. cd /usr/local/src/expat
轉到expat目錄。
2. make
編譯expat源檔案。
3. 把以下命令加到Makefile檔案中,必須保證在輸入ar和ralib之前使用的是Tab鍵。
libexpat.a: $(OBJS)
ar -rc $@ $(OBJS)
ranlib $@
4. make libexpat.a
把expat目標檔案組合成庫檔案。
5. mv libexpat.a /usr/local/lib
PHP設定檔在/usr/local/lib目錄下尋找libexpat.a檔案。把libexpat.a檔案移到PHP設定檔已知的目錄下,可以為以後的操作減少麻煩。
6. cd /usr/local/src/php-3.0.11
轉到PHP的頂級目錄下。
7. mkdir /usr/local/include/xml
確認/usr/local/include/xml目錄是存在的。
8. ln -s \
/usr/local/src/expat/xmltok/xmltok.h \
/usr/local/include/xml/xmltok.h
當能建立符號串連時,為什麼還要複製呢?
9. ln -s \
/usr/local/src/expat/xmlparse.h \
/usr/local/include/xml/xmlparse.h
這是PHP為了能夠正確地被編譯所需要的另一個包含檔案。
10. cd /usr/local/src/apache_1.3.4
轉到Apache的頂級目錄下。
11. ./configure -prefix=/usr/local/apache
回合組態程式,強制設定Apache安裝目錄為/usr/local/apache。
12. cd /usr/local/src/php-3.0.11
轉到PHP的頂級目錄下。
13. ./configure \
--with-apache=../apache_1.3.4 \
--with-iodbc=/usr/local/iodbc \
--with-mysql=/usr/local/mysql \
--with-xml
回合組態程式,並且告訴配置程式支援Apache、MySQL和XML。
14. make
編譯PHP源檔案。
15. make install
安裝已編譯的檔案。PHP庫檔案會被放在Apache的模組目錄下,這樣可以在編譯Apache時能找到它們。
16. cd /usr/local/src/apache_1.3.4
轉到Apache的頂級目錄下。
17. ./configure \
--prefix=/usr/local/apache \
--active-module=src/modules/php3/libphp3.a
再一次配置Apache,這次告訴Apache要載入PHP模組。
18. make
編譯Apache源檔案。
19. make install
安裝已編譯的檔案。
20. mv \
/usr/local/apache/bin/httpd \
/usr/local/apache/bin/httpd-1.3.4
重新命名新建立的httpd可執行檔,這樣就能夠安裝多種版本。
21. ln -s \
/usr/local/apache/bin/httpd-1.3.4 \
/usr/sbin/httpd
建立一個指向新的可執行檔的符號連結。
22. httpd -v
證實可以訪問新的可執行檔。該命令的執行結果將顯示版本1.3.4,而且建立日期也應該正確無誤。
23. 編輯/usr/local/apache/conf/http.conf檔案,搜尋AddType並確認下列行未加註釋。
AddType application/x-httpd-php3 .phtml
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
24. 接著編輯/usr/local/apache/conf/http.conf檔案,搜尋DirectoryIndex並將index.php3放在行尾。
25. 建立一個名為/usr/local/local/php3.ini的檔案,該檔案應包含如下的命令列:
include_path=.:/usr/local/apache/php/
auto_prepend_file=/usr/local/apache/php/prepend.php3
track_vars = on
magic_quotes_gpc = on
sendmail_path /usr/sbin/sendmail -t
26. ln -s \
/usr/local/src/php-3.0.11/doc/manual.html \
/usr/local/src/php-3.0.11/doc/index.html
建立一個符號連結,這樣絕大多數Web瀏覽器就會正確地自動顯示PHP檔案起始頁。
27. ln -s \
/usr/local/src/php-3.0.11/doc \
/usr/local/apache/htdocs/phpdocs
建立一個符號連結,這樣就可以通過http://localhost/phpdocs/, 來訪問PHP文檔。
28. 建立一個叫做/usr/local/apache/htdocs/robots.txt的檔案,這樣就可避免搜尋引擎為PHPLIB,phpMyAdmin和PHP檔案建立索引,新建立的檔案應包括如下設定行:
#robots.txt for (hostname)
User-agent *
Disallow: /phpdocs/
Disallow: /php/
Disallow:/phpMyAdmin/
2.7 安裝PHPLIB
在閱讀第15章“處理並發的訪問”之前,應先安裝PHPLIB,可以按照下列步驟進行安裝:
1. 以root使用者或其他任何可以在/usr/local/apache目錄下寫檔案的使用者註冊。
2. cd /usr/local/apache/
在開始下載檔案之前,進入到Web伺服器的頂級目錄下。
3. 從如下Web網址下載最新版本的檔案,注意gz尾碼的檔案名稱,以免它的檔案名稱phplib.tar.gz被改動。
http://phplib.shonline.de/
4. tar xv2f phplib.tar.gz
解壓縮PHPLIB模組。
5. 編輯/usr/local/lib/php3.ini檔案,應包括下列設定內容:
include_path=.:/usr/local/apache/phplib-6.1/php
auto_prepend_file = /usr/local/apache/phplib-
6.1/php/prepend.php3
track_vars = on
magic_quotes_gpc = on
sendmail_path /usr/sbin/sendmail -t
6. 建立一個名為poe_sessions的mysql資料庫。我一般使用phpMyAdmin,如果願意,也可以使用SQL命令建立資料庫。
7. cd /usr/local/apache/phplib-6.1/stuff
進入建表目錄下。
8. mysql php_book --user=root --password <
create_database.mysql
建立PHPLIB所需要的資料庫表。
9. 使用以下值在mysql資料庫表中增加一條新記錄:
host: %
password: <-- no password.
select_priv: Yes
insert_priv: Yes
update_priv: Yes
delete_priv: Yes
for users named "kris","user01",and "user02".
注意:也可以使用如下SQL語句:
INSERT INTO
user
(
Host
,User
,Password
,Select_priv
,Insert_priv
,Update_priv
,Delete_priv
)
VALUES (
'%'
, 'kris'
, '
, 'Y', 'Y', 'Y', 'Y'
)
10. 使用以下值在mysql資料庫的db表中增加一條新記錄:
host: %
db: poe_sessions
select_priv: Yes
insert_priv: Yes
update_priv: Yes
delete_priv: Yes
for users named "kris","user01",and "user03".
注意:也可以使用如下SQL程式。
INSERT INTO
db
(
Host
,Db
,User
,Select_priv
,Insert_priv
,Update_priv
,Delete_priv
)
VALUES (
'%'
, 'poe_sessions '
, 'kris'
, 'Y', 'Y', 'Y', 'Y'
)
11. /usr/local/mysql/bin/mysqladmin -u root -p reload
重新裝載MySQL許可權表。
12. 在php_book資料庫中建立兩個PHPLIB已認證的使用者(user01和user02),可以使用如下SQL語句:
INSERT INTO
auto_user
(
uid
,username
,password
,perms
) VALUES (
'c14cbf141ab1b7cd009356f555b1234'
,'user01'
,'test'
,'admin'
)
INSERT INTO
auth_user
(
uid
,username
,password
,perms
) VALUES (
'c14cbf141ab1b7cd009356f555b3241'
,'user02'
,'test'
,'admin'
)
13. mv\ /use/local/apache/phplib-6.1/pages \
/use/local/apach/htdocs
將示範子目錄置於Web伺服器的根目錄下,這樣就可以用瀏覽器訪問它。
14. 編輯文字檔/usr/local/apache/htdocs/robots.txt,使它包括如下內容:
Disallow: /phplib/
15. 使用Web瀏覽器訪問http://localhost/phplib/。將會看到2.1所示頁面。
Page 29 圖2.1
圖2.1 重新裝載兩次以後出現的PHPLIB示範頁面
2.8 測試Linux環境下的ODBC
對所裝軟體進行基本測試是很重要的,特別是需要手工編輯設定檔時。如下的測試可確保你的MySQL驅動程式運行正常,並且編譯的iODBC庫檔案也是正確無誤的。
1. 使用清單2.1所列的內容,建立一個名為/usr/local/etc/odbc.ini的檔案。
清單 2.2 /usr/local/etc/odbc.ini- 系統ODBC 設定檔
;
;odbc.ini
;
[ODBC Data Sources]
mysql = mysql
[php_book]
driver = /usr/local/myodbc/lib/libmyodbc.so
host = localhost
database = mysql
user = root
2. cd /usr/local/src/libiodbc-2.50.3/samples
3. ./odbctest
運行ODBC測試程式。
4. DSN=mysql;PWD=password
告訴測試程式要訪問的資料來源。
5. select host,user from user
在提示符下執行一個SQL語句,如果有回應,說明iODBC和MySQL已經可以使用了。
現在,在電腦中已經安裝好了ODBC,由於它的安裝步驟不太清晰而且文檔又很少,所以本章中講述了其安裝和測試指令,然而鑒於ODBC主要是一項Microsoft技術,且很少在Linux中用到,所以這裡是本書中最後一次有關介紹。
2.9 總結:
本章講述了如何擷取PHP,及在電腦中進行安裝所需要的步驟,編譯了內建PHP的特定版本Apache 伺服器。同時,還安裝了將在第15章“中場四:處理並發訪問”中用所到的PHPLIB。