來源:互聯網
上載者:User
關鍵字
網頁
動態
實現
使用
檔案
我們
一個
函數
內容
PH
今天,Web網站費盡心思想要為使用者提供他們從未體驗過的東西。除了友好的介面,細緻的服務,實用的資訊以外,為使用者定製的動態網頁內容也能夠提高Web網站的用處並加強訪問的針對性,這使得使用者更有可能在以後再次訪問你的網站。在這篇文章裡,我們將從對動態資訊的一個概述開始。然後我們將解釋如何使用PHP來在Web頁面裡建立動態內容並察看一個示範的例子。
動態資訊理論
據Merriam-Webster Online地解釋,動態一詞的意思是網頁的內容由“通常是連續的和即時產生的活動或者改變的資訊組成。”因此當我們談論動態資料的時候,我們也就是在談論作為Web頁面發送給使用者的資訊是由不同的來源資料組合而成的。這與靜態網頁的概念是相對的,靜態網頁的內容並不依賴使用者輸入的資料而改變而且通常是直接解析給使用者。Web頁面上的動態資訊有三種主要的類型:
- 動態資料--在一個Web頁面裡產生的變數。
- 動態Web頁面--整個Web頁面都是動態產生的。
- 動態內容--Web頁面的一部分是動態產生的。
你如果希望對動態內容產生的過程進行細微的控制,就象動態資料的那種類型一樣,那麼資料處理的過程就會複雜一些。而如果你想產生大範圍的資訊,就象動態Web頁面的產生那樣,那麼程式的邏輯就會變得複雜。動態內容的產生是這兩種方式的折衷,它能夠讓我們使用兩個很有用的PHP函數,include()和require()。
要記住,你在後端加入的邏輯越多,那麼你的Web網站的效能將會損失得越嚴重。幸運的是,PHP能夠很流暢的進行預先處理過程,所以當我在處理動態內容和資料的時候都儘可能多的使用PHP的功能。
資料來源和PHP功能
所有的動態內容都有一個共同點:它們從一個原始頁面以外的資料來源而來。圖A列出了一些常見的資料來源以及用來處理它們的相應的PHP函數。
Figure A
資料來源
|
PHP 函數
|
注釋
|
User
|
$HTTP_POST_VARS $HTTP_GET_VARS
|
這些函數處理由使用者通過Web表單直接輸入的資料。 |
Database (local or remote)
|
_connect() _pconnect() _close() _() example: mysql_fetch_array()
|
這些都只是PHP許多資料庫訪問函數中的一部分,許多函數是為每個不同的資料庫特別編寫的。你能夠在PHP函數參考手冊裡找到這些函數的完整列表。 |
Remote file
|
fopen(), fclose() fgets(), fputs()
|
這些函數處理一個遠程伺服器上檔案中的資料,這個檔案可以通過FTP訪問。 |
Local file
|
include(), require() fopen(), fclose()
|
這些函數處理位於本機伺服器上的檔案中的資料,比方說設定檔。 |
|
常見的資料來源和處理它們的PHP函數
在這篇文章“教程:PHP起步中,”我們觀看了一個示範的指令碼,這個指令碼要求使用者輸入他們最喜歡的數字。根據使用者輸入的結果,我們在Web頁面上顯示一條訊息。這就是一個由使用者驅動的動態Web內容的例子。從Web表單返回的結果將決定顯示的內容。一個更複雜的例子是“點擊流程”應用程式,這個程式能夠根據一個使用者在Web網站上訪問過的頁面來決定向他或者她發送什麼廣告。
一旦資料已經輸入,不管它是由使用者或者其它的方式輸入的,將會被儲存在一個資料庫中並在以後重新使用。如果它被用來決定顯示的內容,那麼這些內容將可以被認為是“由資料庫驅動的動態內容。”我們將在下一篇文章中更仔細的看看這種類型的動態資訊。 目前,讓我們先察看一個由檔案驅動的動態內容的簡單的PHP指令碼的例子。我們將使用基於一個設定檔的邏輯來決定在Web頁面上應該顯示什麼樣的頁面風格和字型。我們選擇的頁面風格將會在使用者請求Web頁面的時候顯示出來。(這裡我想就包括檔案的例子給你提個醒:你真的應該在這個例子中為完成要求的功能而使用風格頁。)
例子程式:Display.php
Display指令碼使用一個獨立的設定檔來包含變數值和幾個含有HTML的變數部分的包括檔案。雖然這看起來不是特別動態,但是你能夠輕易的要求使用者使用Web表單來建立一個設定檔並使用一定的邏輯來判斷應該載入哪一個設定檔,等等。(我們在“理解PHP的函數和類”這篇文章中所作的討論將協助你完成這個工作。)
由於本文的目的所限,我們將跳過這方面的處理過程並盡量使它簡化。表A展示了我們的首頁面,以及你通過瀏覽器調用的頁面,Display.php。(PHP代碼將用粗體進行顯示。)
表A
這段簡單的代碼必須做三件事情:
你應該注意到在我們的例子中,PHP require()函數和include()函數是完全可以互換的。這兩個函數之間主要的區別在於目標檔案處理的方式不同。一個require()語句將會由它所調用的檔案替換。這意味著在一個迴圈當中,遠端檔案只會被調用一次。而另一方面,在每次遇到include()函數的時候,它都會被重新求值。這意味著在一個迴圈的過程中,檔案將在每一次迴圈過程中都被訪問一次,而且在包括檔案中設定的變數每次都會更新。
在這個例子中,我試圖講清楚什麼時候使用什麼函數合適。對於檔案Displayconf.php,很有可能它裡面的變數值已經改變。畢竟,這是一個設定檔。因此,我選擇了include()函數。而另一方面,$required檔案在互動的過程中很有可能不會改變。如果使用者請求的是不同的檔案體,那麼我們有可能會建立一個新的檔案再把它包括進來,所以我使用require()函數。
進階使用者可能希望看看PHP的手冊來瞭解更多的關於函數require_once() 和 include_once() 的資訊以便能夠對檔案處理和設定檔變數的管理進行更好的控制。
表B 顯示了我們的設定檔,Displayconf.php。(為了簡單化的目的,我們將把所有的檔案放在和Web伺服器相同的目錄下。)我們在這裡要做的就是將$display變數設定成一個可選的值。
表B
# displayconf.php# display.php 的設定檔# -------------------------------------------------# 將變數 $display 設定成下列值之一:# happy, sad, 或者 generic$display = "happy";?>
最後我們需要一些內容檔案--對應設定檔中的每一個選項。因為這些內容都是靜態HTML,所以我們不需要在檔案裡加上PHP腳標。當你在PHP裡使用include()或者require()函數的時候,被調用的檔案在處理過程開始的時候被跳過然後在處理結束的時候被加進來。
"happy"檔案內容(happy.php)
"Sad" 檔案內容 (sad.php)
"Generic" 檔案內容 (generic.php)
當你單擊頁面Display.php的時候,這個頁面的外觀和感受將會根據你在設定檔中輸入的值而改變。
總結
在本文中,我們討論了動態資訊的基礎知識並使用一個指令碼來建立由檔案驅動的動態內容。特別的是,我們使用include() 和 require() PHP函數來提取和發送我們的資料。
下面是一些最後的話。雖然我相信你一定熟悉WAI Web編程指南,但是你也許還應該看看W3C對於動態內容所說的支配以及使用者對它的訪問能力。你可能還要看看PHP手冊中的這一章“使用遠程檔案”來學習如何使用FTP來提取配置資料。