這是一個經常被提出的問題,并且它很容易把人們帶入爭論Linux還是Windows的歧途。這樣的爭論事實上反映出了對于相互競爭的Web開發技術要進行并行分析是多么困難的一件事情,而這一難度同時因為開發人員對任何可比較操作系統的不同意見而大大增加。 基本理論——特點概述 第二點,由于PHP同C編程語言有很多相似之處,對于熟悉相關語法的開發人員來說,PHP則非常容易上手——這種語法同樣在Java、JavaScript以及Perl中得到應用。第三,由于是開放源代碼產品,PHP將繼續快速發展,更為重要的是相關漏洞補丁將免費的定期植入到核心庫中。 此外,在一些特定的編程需求下,PHP對于開發人員顯示出了更為誘人的吸引力。首先,PHP有內建庫支持對于圖片及PDF文檔的直接創建和相關操作。這意味著當一個應用程序調用包含有anti-aliased類型文本的動態創建菜單圖像,或者是需要導出Acrobat格式頁面時,PHP都將是解決此類問題的理想技術。盡管這些功能在理論上也可以通過其他與PHP相競爭的技術獲得,但往往其他技術需要安裝第三方自定義組件才能實現。 另一點使得PHP成為編寫服務器腳本最佳選擇的是在處理連接mySOL或者Postgres數據庫一類的問題時PHP的良好表現。盡管對于mySOL或者Postgres數據庫的訪問可以通過ASP技術借助ODBC連接來實現,但這常常需要系統管理員進行額外的配置。幸運的是,這點限制在ASP.NET中得到了改正,當需要建立類似于使用MS SQL Server的直接數據庫連接時可以通過mySQL提供數據。 ASP——動態服務頁面(Active Server Pages) ASP.NET 對于ASP以及PHP來說,將ASP.NET看作是另外一種語言的原因是它運行在完全不同的構架之上。前者是翻譯腳本語言,而.NET則是經過編譯的framework。這就意味著首先Web頁面的運行速度將會有極大提高。同時,源代碼更加安全且更為健壯。此外,ASP.NET給Web編程帶來了新的理念——即“code-behind頁面”的思想。按照code-behind思想,每一個HTML頁面都是由自身經過編譯的程序化指令進行驅動。因此,HTML——或稱之為表現層——很大程度上脫離了應用程序的商業邏輯。盡管這樣的分離也可以通過PHP和ASP來實現,但這并非同ASP.NET一樣屬于自身技術的主要部分。 ASP.NET的另一好處是它完整的集成了對XML以及Web服務的各種支持。對.NET而言可以使用非常廣泛的安全以及密碼系統庫,這對于金融機構和企業數據應用程序尤為有用。就缺陷而言,即使是具備豐富經驗的開發人員也會發現使用.NET可能把自己搞糊涂。不考慮開發者對于所使用的編程語言的熟悉程度,對于Web開發人員來說,在程序范例方面難度的大幅提升可能會成為他們融入ASP.NET的主要障礙。對ASP.NET應用程序來說主機同樣是個問題,ASP.NET并未同ASP或者PHP一樣獲得了主機提供商的廣泛支持,無法在同一級別上展開競爭。 實踐——語言比較
' VBScript Example Option Explicit myVar = 1 myOtherVar = myVar myVar = 2
' myResult will be 3 myResult = myVar + myOtherVar %>
<? // PHP Example $myVar = 1; 'Use the ampersand to make a reference $myOtherVar = &$myVar; $myVar = 2; // $myResult will be 4 $myResult = $myVar + $myOtherVar; ?>
' ASP Example myFormVal = request.form("myInputField") myQSval = request.querystring("myQSitem") myVal = request.item("myFormOrQSitem") %>
<? // PHP 4.1+ Example $myFormVal = $_POST['myInputField']; $myQSval = $_REQUEST['myQSitem'];
// PHP 3+ Example $myFormVal = $HTTP_POST_VARS['myInputField'];
// If register_globals = on $myVal = $myFormOrQSitem; ?>
<!-- ASP.NET example --> <html> <script language="VB" runat=server> Sub SubmitBtn_Click(Sender As Object, E As EventArgs) Message.Text = "Hello " & Name.Text End Sub </script> <body> <form action="action.aspx" method="post" runat="server"> Name: <asp:textbox id="Name" runat="server"/> <asp:button text="OK" OnClick="SubmitBtn_Click" runat="server"/> <asp:label id="Message" runat="server"/> </form> </body> </html>
// PHP Example $link = mysql_connect("host", "user", "password")or die("mysql_error()); mysql_select_db("database") or die("Could not select database"); $query = "SELECT * FROM Table"; $result = mysql_query($query) or die(mysql_error());
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { foreach ($line as $col_value) { //do something } } ?> 連接數據庫 <% 'ASP Example Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open "Driver={SQL Server};Server=MyServerName;" & _ "Database=myDatabaseName;Uid=;Pwd="
const strSQL = "SELECT * FROM Table" Set objRS = Server.CreateObject("ADODB.Recordset") objRS.OpenstrSQL, objConn Do While Not objRS.EOF 'do something objRS.MoveNext Loop %>
' ASP.NET Example <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %>
<html> <script language="VB" runat="server"> Sub Page_Load(Sender As Object, E As EventArgs) Dim MyConn As SqlConnection = New SqlConnection("server=(local). . . ") Dim MyComm As SqlCommand = New SqlCommand("select * from Table", MyConn) MyConn.Open() Dim dr As SqlDataReader = MyComm.ExecuteReader() MyDataGrid.DataSource = dr MyDataGrid.DataBind() MyConn.Close() End Sub </script> <body> <ASP:DataGrid id="MyDataGrid" runat="server" Width="600" BackColor="#FFFFFF" BorderColor="#000000" ShowFooter="false" CellPadding=2 CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#EEEEEE" EnableViewState="false" /> </body> </html> 結論 選擇ASP、PHP還是ASP.NET將最終取決于應用程序的需要,以及運行程序的系統環境。開發人員對于相似編程語言或范例的熟悉程度同樣可以作為選擇的因素。記住沒有完美的方法和個人實際情況可以表明哪種技術是最佳選擇。比如,使用ASP.NET為一個Windows服務器創建一個單頁面的表單郵件應用程序似乎有些大材小用,但對于ASP來說這是極佳的應用環境。如果一個站點需要同Linux Apache服務器上的mySQL數據庫連接,那么使用ASP或者ASP.NET則會顯得力不從心。如果能夠提前詳細考慮用戶的個人要求,那么開發人員在這些相互競爭的技術中進行選擇的過程則已成功了一半。 |
溫馨提示:喜歡本站的話,請收藏一下本站!