PHP教程.安裝PHP - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- PHP教程.安裝PHP (http://www.webasp.net/article/16/15043.htm) |
| -- 作者:未知 -- 發佈日期: 2004-11-23 |
| 安裝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。 |
| webasp.net |