原文轉自:http://www.ibm.com/developerworks/cn/linux/l-xampp/
Nils-Erik Frantzell (nfrantze@ucsc.edu)電腦科學系,UC Santa Cruz
2004 年 11 月 30 日
諸如 Apache Friends 中的 XAMPP 之類的開放源碼軟體簡化了開源項目的開發,方式是通過簡化在穩定和標準化環境中應用程式的編寫和分發。傳統情況下,AMPP -- Apache、MySQL、PHP 和 Perl -- 都是以單獨產品的形式進行安裝和配置。將它們整合到中介軟體軟體中的承諾使得開源項目的開發相對於 J2EE 應用程式的開發來說更具競爭力,至少對於底層的應用程式來說是如此。在本文中,您將學習如何在 Mandrake Linux 10.0 上安裝、配置和備份 XAMPP,以及如何配置和管理 XAMPP,以及如何在 XAMPP 環境中安裝自己的應用程式。
J2EE(Java 2 Enterprise Edition)的出現極大地改變了軟體領域,它提供了一個整合的中介軟體軟體,可以極大地簡化編寫和部署 Java 應用程式的任務。一時之間,開源社區因為缺少類似的整合架構而被遠遠地拋到了後面。
最近以來,隨著在 Apache Friends 中出現 XAMPP 這種整合的開放源碼軟體,這種情況開始逐漸地發生變化。雖然這些工具與 J2EE 相比還非常簡單,甚至是微不足道,但是不管怎樣,這對於通往全面的系統整合之路來說,都邁出了重要一步。 PHP 5.0 (它使得 PHP 成為完全物件導向的)是這種趨勢正在加速發展的一個良好的風向標。
本文的重點是介紹整合的開放源碼軟體之一:Apache Friends 中的 XAMPP。
XAMPP 簡介
XAMPP 是一個功能全面的 AMPP (Apache、MySQL、PHP、Perl)軟體包,這是 Linux 平台上可以使用的幾種非商業 AMPP 中介軟體之一。採用這種緊密的整合,XAMPP 可以運行任何程式:從個人首頁到功能全面的產品網站(雖然這僅僅用於開發目的;出於安全考慮,XAMPP 還不適於用在產品伺服器上)。
XAMPP 實際上在以下幾個方面大放光彩:
- 易於安裝和設定。
- 包含很多有用的軟體包,可以簡化諸如產生流量報告和加速 PHP 內容之類的任務。
- 已經在 SUSE、Red Hat、Mandrake、Debian Linux 發行版以及 Windows 和 Solaris 上進行了完整的測試。
對於本文來說,我們將在 Mandrake Linux 10.0 上安裝 XAMPP。現在我們首先看看 XAMPP 中提供的預設軟體包。
基本的軟體包
基本的軟體包包括系統、編程和伺服器軟體:
- Apache,著名的 Web 服務器
- MySQL,一種傑出、免費的開來源資料庫
- PHP,一種程式設計語言(在撰寫本文時版本為 4.3.8 和 5.0.1)
- Perl,一種程式設計語言
- ProFTPD,一個 FTP 伺服器
- OpenSSL,可以支援安全通訊端層
圖形軟體包
XAMPP 包括以下與圖形有關的軟體包:
- GD,“Graphics Draw”庫
- libpng,官方的 PNG 參考實現庫
- libjpeg,官方的 JPEG 參考實現庫
- ncurses,字元圖形庫
資料庫軟體包
如果沒有以下的資料庫軟體包,怎麼還能叫整合軟體呢?
- gdbm,標準的 UNIX dbm 庫的 GNU 實現
- SQLite,一個相當小的、無需任何配置的 SQL 資料庫引擎
- FreeTDS,一個資料庫,讓 UNIX 和 Linux 程式可以訪問 Microsoft SQL 和 Sybase 資料庫
XML 軟體包
為了開發 XML 程式,XAMPP 應該包含以下軟體包:
- expat,一個 XML 解析器庫
- Salbotron,一個 XML 工具包
- libxml,一個 XML C 解析器和 GNOME 工具包
PHP 軟體包
為了開發 PHP 程式,XAMPP 應該包括以下軟體包:
- PEAR,PHP 庫
- 一個 pdf 類,可以使用 PHP 產生動態 PDF 文檔
- TURCK MMCache,一個 PHP 效能增強器
其他軟體包
最後,XAMPP 中包含了以下軟體包來展示自己的強大功能:
- zlib,一個壓縮庫
- mod_perl,在 Apache 中嵌入了一個永久的 Perl 解譯器
- gettext,一個工具集,可以協助 GNU 軟體包產生多語言的訊息
- mcrypt,一個加密程式
- Ming,一個 Flash (SWF) 輸出庫
- Freetype2,一個軟體前端引擎
- IMAP C-Client,一個郵件編程 API
現在讓我們討論一下安裝 XAMPP 的問題。
安裝並作為守護進程運行
要安裝 XAMPP,請從 Apache Friends Web 網站上下載最新的二進位檔案(請參閱 參考資料 中的連結)。使用下面的命令將其解開到 /opt 目錄中:
tar xvfz xampp-linux-1.4.7.tar.gz -C /opt
就是這樣!XAMPP 現在已經被安裝到 /opt/lampp 目錄中了。之前安裝在 /opt 目錄中的內容都已經被覆蓋了。如果您正在運行一箇舊版本的 XAMPP,並且不想再次下載整個軟體包,Apache Friends 中還提供了一個升級包來下載需要的軟體包。
現在所有的軟體都已經安裝好了,讓我們啟動新的守護進程。將當前的工作目錄切換到 /opt/lampp ( cd /opt/lampp)並輸入下面的命令:
./lampp start
您應該會看到下面的結果:
Starting XAMPP for Linux 1.4.7...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.
XAMPP 現在就啟動並運行了。最好的驗證方法是開啟一個瀏覽器並在地址欄中輸入 localhost,並按斷行符號鍵。此時瀏覽器會被重新導向到 XAMPP 的 welcome 頁面。
圖 1. XAMPP welcome 頁面
點擊左邊導覽列中的 Status 連結,就可以看到必需的服務已經正確啟動了。如果所有的服務都運行正常,您就會看到下面的頁面:
圖 2. Service status 頁面
恭喜!您現在已經安裝和設定好了一個完整的 AMPP 開發環境了。現在讓我們安裝一個簡單的應用程式來展示一下如何使用這種環境。
安裝一個簡單的應用程式
要利用 XAMPP 的基本特性,您需要一個簡單的應用程式。最好的應用程式是一個在後端使用資料庫的程式;並使用一個相當簡單的資料庫,其中包含了一個精心設計的表。
測試資料庫包含一個只有一列的表。讓我們按照測試程式的(電腦)傳統,設計在我們的表中存放一條記錄 “Hello World!”。我們將使用一個 Perl 和 一個 PHP 指令碼來訪問這個資料庫。這兩個指令碼都可以訪問這個資料庫,從中檢索這行記錄,並將其輸出到螢幕上。
工具
我們的資料庫將使用 phpMyAdmin 來建立和管理,這是使用 PHP 編寫的一個傑出的基於 Web 的 MySQL 管理工具。它有一個非常友好的使用者介面,可以允許您處理各種複雜的任務,包括建立/刪除/修改資料庫和表,以及匯出資料、管理關鍵字和處理 SQL 檔案。phpMyAdmin 是一個傑出的工具,因為:
- 它可以協助初學者熟悉 MySQL,而不用使用命令列介面來處理這些任務。
- 它允許進階使用者更快更容易地執行簡單的任務和例行的任務。
- 當您希望為某些使用者授權訪問資料庫而不想讓他們完全訪問 shell 時,對於這種情況非常有用。
建立資料庫
要在 phpMyAdmin 中建立一個資料庫,請遵循下面的步驟:
- 轉換到 XAMPP 的 start 頁面 (localhost)。
- 在左邊導覽列的 Tools 下面選擇 phpMyAdmin。
- 在 phpMyAdmin 首頁的 Create New Database 域中,輸入
hello_world,並點擊 Create。
現在您必須在資料庫中建立一個表,並指定該表中應該包含哪些欄位(欄位與列類似)。讓我們將自己的表稱為“hello_table”,並讓它只包含一個欄位,其中儲存記錄“Hello world!”。在 Name 文本域中輸入 hello_table,並在 Fields 文本域中輸入 1。輸入完之後,點擊 Go。
現在應該執行建立資料庫的最後一個步驟了:為列選擇一個名字和一個資料類型定義。讓我們選中“hello”並將其命名為“hello_column”;並在 Field 文本域中輸入 hello_column。
由於我們要在列中儲存字串“Hello World!”,因此其類型必須是 char,長度為 12 (字串 "Hello World!" 的長度)。預設類型 varchar 就足夠了。在 Type 後面的 Length/Values 文本域中,輸入 12,表示最大長度是 12 個字元。不用關心該頁面中其他域的設定,繼續點擊 Save。
如果一切正常,您應該會看到下面的介面:
圖 3. Hello World 資料庫摘要
現在讓我們插入記錄 "Hello World!"。點擊 Insert 標籤,並在 Value 文本域中輸入 "Hello World!"。 Function 下拉式清單在這個例子中可以保留不變。點擊 Go,將 "Hello World!" 記錄插入資料庫中。
要確認記錄已經成功插入資料庫,請點擊 Browse 標籤。現在會顯示 "hello world"。
指令碼
現在後端軟體已經啟動並運行了,應該處理指令碼部分了。我們將使用兩個指令碼,一個使用 Perl 編寫,另外一個使用 PHP 編寫。對於每個指令碼來說,惟一的要求就是一個資料庫連接、資料庫存取權限以及在螢幕上輸出檢索到的行。
清單 1. 簡單的資料庫連接,以及在 PHP 中使用 PEAR::DB 進行檢索
require_once 'DB.php'; // must be included in any script that uses PEAR::DB // it is a huge security risk to store your database connection information // in the same file as your code. We have done it here solely for the purpose // of this example. Please store your database connection information in another // file that is not in your document root directory and adequately protected. // database connection information $db_host = "localhost"; // hostname of the database server $db_user = "root"; // database user's username $db_pass = ""; // database user's password, nothing by default $db_name = "hello_world"; // the name of the database to connect to $db_type = "mysql"; // the type of database server. // your data source name string. This contains the connection // information for your database. $dsn = "$db_type://$db_user:$db_pass@$db_host/$db_name"; // creates a database connection object or a database error // object based on the success of the database connection. $db = DB::connect($dsn, TRUE); // if an error was encountered, the script exits with an error message if (DB::isError($db)) { die($db->getMessage()); } // SQL query that you wish to use to query the database $sql = "SELECT * FROM hello_table"; // query the database, store result in $result $result = $db->query($sql); // exits with an error message if the query was unsuccessful if(DB::isError($result)){ die($result->getMessage()); } // fetch rows from the database until no more rows exist. // output the "hello_column" field of each row to the screen. // once no more rows exist, exit with an error message. while($row = $result->fetchRow(DB_FETCHMODE_OBJECT)){ if(DB::isError($row)){ die($row->getMessage()); } print("<H1>$row->hello_column</H1>"); $result->free(); } $db->disconnect(); //disconnect from the database
|
這兩個指令碼都會串連到資料庫上,並檢索一行資料,並將該行輸出到螢幕上。PHP 的資料庫訪問是使用 PEAR::DB 完成的,這是一個方便的資料庫抽象層,不管資料庫是如何?的,它都可以使用相同的資料庫存取碼。不幸的是,XAMPP 中並沒有包含一個用於 Perl 的資料庫抽象層。
存放指令碼
因此,現在我們已經做好了所需的一切。資料庫已經啟動並運行了,並且已經有了兩個測試用的指令碼。現在需要做的工作是將這些指令碼放到正確的地方。讓我們快速瞭解一下 XAMPP 是如何存放在硬碟上的,如 清單 2 所示。
我們現在感興趣的目錄是 /opt/lampp/htdocs/,也就是 Apache 的 Documents 目錄。在 Web 網站的根目錄中顯示的任何 Web 頁面和相關檔案都位於這個目錄中。由於我們現在能夠看到 XAMPP 的 welcome 頁面,因此這個目錄中已經存在一些檔案了。現在讓我們快速瞭解一下這個目錄的內容:(輸入 ls /opt/lampp/htdocs):
drwxr-xr-x 2 root root 4096 Jan 24 2003 apache
-rwxr-xr-x 1 nobody root 163 Oct 31 2003 index.html
drwxr-xr-x 2 nobody root 4096 Sep 12 21:54 webalizer
drwxr-xr-x 5 root root 4096 Jun 15 06:24 xampp
正如您可以看到的一樣,這個目錄中早已存在一些檔案了。讓我們在這個目錄中建立一個自己的目錄 hello_world ( mkdir hello_world)來存放指令碼。從現在開始,您就可以輸入 localhost/hello_world 來訪問 hello_world 目錄中的所有檔案了。現在,將這兩個指令碼儲存到這個目錄中。到此為止,所有一切都已經完成了!
測試應用程式
要測試這個應用程式,首先切換到瀏覽器中,輸入 localhost/hello_world。您應該會看到下面的介面:
圖 4. Hello World!
恭喜!您已經設定好 XAMPP 上的一個應用程式了。
增強安全性
XAMPP 的目標是一個開發環境。這種配置為程式員提供了一種對工具集沒有任何限制的自由控制能力。作為自由的結果,預設的 XAMPP 安裝是非常不安全的。例如,有些操作幾乎無需登入。
對於 0.9.5 以及更新版本的 XAMPP 來說,您可以運行下面的命令來增強安全性:
/opt/lampp/lampp security
此時會給出一些提示說明現有的不安全的地方,您可以選擇是否修複這個問題。雖然這樣可以使 XAMPP 安裝更加安全,但是您仍然不應當在產品伺服器中使用 XAMPP。清單 3 列出了安全性提示:
清單 3. XAMPP 中的安全性提示
XAMPP: Quick security check... XAMPP: Your XAMPP pages are NOT secured by a password. XAMPP: Do you want to set a password? [yes] yes XAMPP: Password: XAMPP: Password (again): XAMPP: Password protection active. Please use 'lampp' as user name! XAMPP: MySQL is accessable via network. XAMPP: Normaly that's not recommended. Do you want me to turn it off? [yes] yes XAMPP: Turned off. XAMPP: Stopping MySQL... XAMPP: Starting MySQL... XAMPP: The MySQL/phpMyAdmin user pma has no password set!!! XAMPP: Do you want to set a password? [yes] yes XAMPP: Password: XAMPP: Password (again): XAMPP: Setting new MySQL pma password. XAMPP: Setting phpMyAdmin's pma password to the new one. XAMPP: MySQL has no root passwort set!!! XAMPP: Do you want to set a password? [yes] yes XAMPP: Write the password somewhere down to make sure you won't forget it!!! XAMPP: Password: XAMPP: Password (again): XAMPP: Setting new MySQL root password. XAMPP: Setting phpMyAdmin's root password to the new one. XAMPP: The FTP password is still set to 'lampp'. XAMPP: Do you want to change the password? [yes] yes XAMPP: Password: XAMPP: Password (again): XAMPP: Reload ProFTPD... XAMPP: Done.
|
執行備份
因此,假設您的 XAMPP 安裝已經啟動並運行了幾周了,並向其中輸入了很多資料,那麼您就應該防範出現硬碟崩潰的風險。您需要做哪些備份工作呢?
使用 XAMPP 非常簡單。將工作目錄切換到 /opt/lampp ( cd /opt/lampp) 中,並輸入下面的命令:
./lampp backup
如果您已經設定了 MySQL 的 root 密碼,那麼在這個命令後面就要添加上 root 使用者的密碼。您應該會看到下面的內容:
Backing up databases...
Backing up configuration, log and htdocs files...
Calculating checksums...
Building final backup file...
Backup finished.
Take care of /opt/lampp/backup/xampp-backup-15-09-04.sh
要恢複以前的備份,請以 root 使用者的身份運行下面的命令:
sh backupfilename
如果一切正常,您將看到下面的結果:
Checking integrity of files...
Restoring configuration, log and htdocs files...
Checking versions...
Installed: XAMPP 1.4.7
Backup from: XAMPP 1.4.7
Restoring MySQL databases...
Restoring MySQL user databases...
Backup complete. Have fun!
You may need to restart XAMPP to complete the restore.
重新啟動 XAMPP ( cd /opt/lampp, ./lampp restart),恢複的資料應該可用了。
結束語
雖然這種整合解決方案軟體是否可以完全與 J2EE 競爭,尚需時日來進行驗證,但是最近的發行版 PHP 5.0 (主要改進包括完全的物件導向的支援)與 MySQL 資料庫的共同快速增長已經證明了它在開發人員之間越來越流行。這意味著像 XAMPP 這種開放源碼中介軟體在低端軟體市場上還是有一定的存活空間的。
參考資料
- 您可以參閱本文在 developerWorks 全球網站上的 英文原文。
- 從 Apache Friends 上下載 XAMPP,這是一個非盈利組織,目標是增強 Apache Web 服務器。該網站上有最新的 XAMPP 資訊和發行版本。
- PHP 簡介 (developerWorks,2000 年 12 月) 可以引導您入門 PHP 指令碼語言。當您閱讀這篇文章時,只需在搜尋域中輸入“PHP”,即可尋找 IBM 提供的許多豐富的 PHP 資源。
- 更佳編程之路 系列文章 (developerWorks) 是一組優秀的系列文章,可讓您更加深入地瞭解 Perl 語言。要想瞭解有關 Perl 的更多內容,請搜尋 developerWorks 網站。
- 將 PHP 應用程式串連到 Apache Derby (developerWorks,2004 年 9 月)和 使用 Apache Derby 開發 Perl 應用程式 (developerWorks,2004 年 10 月)這兩篇文章是 PHP 和 Perl 開發人員必讀的文章。
- phpMyAdmin 項目 包含了很多有用的資訊,並可以下載這個傑出的基於 Web 的 MySQL 管理工具。
- Practical Unix & Internet Security (O'Reilly & Associates,1996) 是一本有關係統安全性各個方面的優秀參考書,內容涉及從使用者管理到起草安全性原則。
- PHP.net 提供了一個線上的可搜尋函數庫,它對於尋找有關 PHP 方法的詳細資料和學習語言構造有很大的協助。
- The PHP Extension and Application Repository (PEAR) 提供了一些可以簡化 PHP 編程的組件,包括非常流行的 PEAR::DB。
- 有關 MySQL 的協助, MySQL reference manual 中包含了有關這個流行資料庫各個方面的詳細資料。
- 請訪問 Apache HTTP Server Project,可以找到有關 Web 的最流行 http 伺服器的最新版本和資訊。
- 在 developerWorks Linux 專區 中可以找到更多為 Linux 開發人員準備的資源。
- 從 developerWorks 的 Speed-start your Linux app 專區下載運行於 Linux 之上的 IBM 中介軟體產品的免費測試版本,其中包括 WebSphere Studio Application Developer、WebSphere Application Server、DB2 Universal Database、Tivoli Access Manager 和 Tivoli Directory Server,並可學習 how-to 文章和獲得支援人員。
- 通過參與 developerWorks blogs 來參與 developerWorks 社區的工作。
- 在 Developer Bookstore 的 Linux 地區中購買有關 Linux 的打折書籍。
關於作者
|
|
|
Nils-Erik Frantzell 目前在位於聖克魯斯的加州大學學習電腦科學。他的興趣包括 Linux、Web 編程(尤其是 PHP)、網路、開源技術以及一些電腦硬體。他的業餘時間用於飼養一些食肉性的魚和欣賞電子音樂。您可以通過 nfrantze@ucsc.edu 與 Nils-Erik 聯絡。 |