接上一篇:PHP 與 ASP.NET正面交鋒(一) 安全性比較 ASP.NET 官方要求您使用 IIS。不幸的是,IIS 易受攻擊的歷史由來已久,這使得許多管理員不願意部署它來處理 Web 站點。這些弱點是因為 Microsoft 的缺陷或是因為 IIS 是黑客們攻擊的目標無關緊要:這些系統有被黑或被攻擊的歷史。PHP 也運行在 Apache 上,Apache 快速並且是開放源代碼的,並擁有很好的安全性記錄。此外,正如我提到過的,Apache 可以在許多平台上運行。 如果您在考慮 ASP.NET,但您想用 Apache 作為 Internet 門戶,那麼很幸運您可以有一些選擇。首先,您可以使用 Apache 將請求轉發給在另一台計算機上內部運行的 IIS。然後 Apache 處理靜態內容,並將 aspx 內容傳送給 IIS 服務器(不暴露給 Internet)。 不過,如果您想利用 Apache 承載 ASP.NET,那麼提供了一些選項,這些選項 Microsoft 可能支持也可能不支持。作為最後一種選擇,有 Ximian 的 Project Mono,它致力於構建一個開放源代碼模塊。請浏覽 www.go-mono.com,以獲取更多信息。 數據庫編碼示例 您在選用 PHP 或 ASP.NET 時首先要考慮因素之一就是與數據庫的連接。不過,利用 ASP.NET 更復雜,因為您可以從許多備選語言中選擇任意一種語言。當然,這些代碼示例將必須嵌入到 HTML 頁面、實例化的類等之中。不過,以下信息將使您對二者的編碼風格有所了解。 PHP 5 與 Oracle 連接 下面是一個 PHP 5 類,它提供了一個 Oracle 連接和斷開例程,用以演示利用 PHP 5(也可以使用其他驅動程序(如 ODBC 驅動程序)和通用的數據庫接口)與 Oracle 連接的一種方式: class oracle_object { protected $theDB; protected $user; protected $pass; protected $db; function __construct($u, $p, $d) { $this->user = $u; $this->pass = $p; $this->db = $d; } function db_open () { $theDB = @OCILogon($this->user, $this->pass, $this->db); db_check_errors($php_errormsg); } function db_close() { @OCILogoff($theDB); db_check_errors($php_errormsg); } function __destruct () { print ("so long..."); } } ASP.NET 與 Oracle 連接 如果您希望利用 VB.NET(Visual Basic 是 Microsoft 的默認 .NET 編程語言)與 Oracle 連接,那麼請看一下這個來自 MSDN 的示例: Imports System Imports System.Data Imports System.Data.OracleClient Imports Microsoft.VisualBasic Class Sample Public Shared Sub Main() Dim oraConn As OracleConnection = New OracleConnection ("Data Source=MyOracleServer;Integrated Security=yes;") Dim oraCMD As OracleCommand = New OracleCommand ("SELECT CUSTOMER_ID, NAME FROM DEMO.CUSTOMER", oraConn) oraConn.Open() Dim myReader As OracleDataReader = oraCMD.ExecuteReader() Do While (myReader.Read()) Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", myReader.GetInt32(0), myReader.GetString(1)) Loop myReader.Close() oraConn.Close() End Sub End Class 作出選擇 假定您還沒有決定選用 PHP,我可以斷言 PHP 的優勢遠遠超過它的弱點。(請參見表 1 中的概要。)這些優勢歸結為價格、速度和效率、安全性、跨平台適用性和開放源代碼機遇。它惟一的弱點是缺少一種純粹和完美的 OOP 實現,不過,這是一個很小的缺點。雖然語言結構的確有幫助,但好的編碼最終是由實踐、執行、好的習慣和規范帶來的。 表 1 PHP 4 PHP 5 ASP.NET 軟件價格 免費 免費 免費 平台價格 免費 免費 $$ 速度 強 強 弱 效率 強 強 弱 安全性 強 強 強 平台 強 強 弱(僅用於 IIS) 平台 任意 任意 win32(僅用於 IIS) 是否提供源代碼 是 是 否 異常 否 是 是 OOP 弱 強 強 價格。在此,我們不應簡單地考慮初始投資 — 對 PHP 而言,這很明顯是免費的 — 還應考慮實施、維護和調試的成本。對 PHP 而言,您可能需要購買 Zend 優化引擎。然而,使用 ASP,您將從一開始就進行投資,而且您還要為附加的技術 — 例如,執行圖形處理的庫 — 支付費用。但從長遠來看,PHP 將不會逼迫您升級並向您收取更多的許可費用。接觸過復雜許可的每一個人都知道,很多公司花費大量的時間和金錢僅是為了確保其順應性。此外,當在獲得錯誤修復的時間上,您得到的反應也有所不同。這當然將轉化成時間,時間又將轉化成總體開發的成本。 速度和效率。正如我先前提到的,ASP.NET 是一個允許您使用各種編程語言的框架。此外,它據稱擁有一個極好的面向對象模型。盡管所有這些都是真的,但在考慮到速度時,它卻是不利的。基於以上原因,在 ASP.NET 中運行 ASP 頁面與在 PHP 引擎中運行等效的 PHP 頁面相比需要執行更多代碼。PHP 是一種“快速粗糙”的解決方案,是為完成工作而設計的解決方案。雖然自 2.0 和 3.0 版本以來為其增強了許多強健性,但它仍然保留著核心的優化的高速方法。 速度不是惟一要考慮的因素。內存使用率也很重要。 安全性。ASP.NET 運行在 IIS 上,而 IIS 已被攻擊了無數次 — 正如每隔一周的 IT 新聞報告所證實的。它已經成為這樣一種負擔,實際上,盡管其耗巨資進行銷售宣傳,但許多 IT 專業人員仍然拒絕用 IIS Web 服務器來開放他們的網絡。而 PHP 使用 Apache。Apache 擁有已被證明的速度、可靠性和穩固的安全性的記錄。請浏覽 www.securityfocus.com,以獲取更多信息。 跨平台適用性。ASP.NET 在 IIS 上運行,並且開始在 Apache 上運行(Apache 能夠在許多平台上運行)。PHP 從一開始就設計用於和 Apache 一起工作,因此您擁有許多可供選擇的已被證明和可靠的服務器平台。 開放源代碼機遇。開放源代碼並不只靠一些異想天開的編程人員或想要節省一些許可費用的公司來開展。當您處理軟件本身的錯誤時,開放源代碼可能成為真正的天賜之物。 在使用 PHP 或 ASP.NET 的情況下,您都會有一個大的用戶群,他們使用軟件並且可能遇到錯誤。使用 ASP.NET,這些錯誤必須通過一個官方程序來通知、修復、測試,並在一個新的補丁或版本中消除。然而,PHP 補丁可以快速地得到修補並發布。目睹開放源代碼發展的任何人都知道,新的版本和補丁通常在幾天內而不是像商業軟件一樣在幾個星期或幾個月內推出。如果這不夠快,那麼您通常可以自己來修補問題(如果必要的話)。