PHP與ASP.NET正面交鋒(二)_PHP
最後更新:2016-06-01
來源:互聯網
上載者:User
關鍵字
正面
PHP
ASP.NET
Apache
IIS
一個
接上一篇: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 補丁可以快速地得到修補並發布。目睹開放原始碼發展的任何人都知道,新的版本和補丁通常在幾天內而不是像商業軟體一樣在幾個星期或幾個月內推出。如果這不夠快,那麼您通常可以自己來修補問題(如果必要的話)。