來源:互聯網
上載者:User
關鍵字
發送
編輯
一個
PHP
故事
檔案
HTML
主題
如果
作為構建動態網頁的一種語言,PHP提供了一種簡化的方法來構造複雜而功能強大的 與 Web 相關的程式。Erik用一個原始的、現實世界的網站樣本逐步說明了 PHP 的基本原理。本系列文章分為兩部分,第 1 部分介紹了 PHP的基本概念,並分析了一個應用程式樣本,Webzine。Webzine 包括內容提供者可輸入文章文本的一個編輯頁,以及用來將該內容展示給全世界的一個前端。
如果您是初次接觸PHP,您可能會驚喜地發現在實踐中它是多麼便於使用。本文旨在使您對 PHP的工作方式留下一個好的印象; 隨後您就可以確定它是否適合您。
1.有關PHP的經驗
本系列文章分為兩部分,第1部分說明這個應用程式是如何工作的(不包含在您的系統上安裝PHP)。您將有機會試用主索引頁,並窺視一下部分組件在幕後是如何工作的。如果這是您唯一的動力,則請一定要查看下一篇,在那一部分將深入探討有關主索引頁的其他內容。(第 2部分還將用幾個程式樣本討論編輯組件。您可以下載原始碼並將您自己的想法付諸實施。)
如果您瞭解 HTML 並熟悉任何一種類似 C 語言的語言(尤其是Perl),則您理解下面的樣本應該不成問題。 即使您沒有太多使用過類似C的語言,您仍然能夠理解這些樣本。但您確實需要瞭解 HTML的基本知識。
這個 PHP 應用程式範例是一個產生閱讀器的Webzine,它帶有一個簡單的發送模組(代碼不超過3K)。該模組顯示一個主題列表。
在每個主題標題下是一系列按逆時間順序排列的文章摘要。使用者通過單擊標題就可以看到整篇文章。還有一個稍複雜一點的編輯模組,它允許任何讀者成為作者並提交他/她自己的內容。作者必須選擇一個類別,並輸入文章的標題、簡單的摘要和故事的全文。如果願意,您可以輸入一個影像檔的URL 並單擊“預覽”按鈕來檢驗是否一切已經就緒。作者的輸入要經過驗證--甚至要經過安全檢查,這種安全檢查將把除少數安全的標記以外的所有標記轉換為非活動格式,從而防止危險或惡意的HTML 編碼被執行。例如,字串 將變為。這種轉換實際上使標記無效。
2.一項專用的 PHP 技術
在研究Webzine的實際代碼之前,讓我們首先考慮一個簡單的樣本,這個樣本很好地說明了PHP 的特徵。PHP的文法允許您任意將HTML語句與PHP語句混合在一起。這意味著HTML語句可以出現在迴圈、if/else語句、函數等上下文中。我在Webzine程式中利用了這一特性,但下面的代碼範例用一種更簡單的方法使它變得更簡潔。
假定我們有兩個數組,$names和$days,它們包含一年中各個月的資訊,於是$days[0]= 31和$names[0]="January",$days[1]等於28和$names[1]等於"February",等等。下面這項技術用來建立包含天數和月名的一個表:
清單 1:建立包含天數和月名的一個表
Name |
Days |
for($i=0; $i<12; $i++) { // 迴圈開始。?>
|
|
} // 迴圈結束。?>
為明確起見,上面的PHP語句用紅色顯示;HTML語句用黑色顯示。請注意,專用標記 從HTML切換到 PHP,而 ?> 切換回 HTML。
要注意的一點是:您可以切換到 PHP,開始一個for迴圈(或 if/else,或switch,或其他語句),然後退回到HTML,現在您正在輸入的 HTML命令將成為迴圈結構的一部分,所以它們隨迴圈一起重複。您可以根據需要(例如,如我在上面所做的那樣,發出echo 語句以將變數輸出到網頁中)進入或退出 PHP 模式。然後,當您退回PHP 並輸入一個結束花括弧時,正如您所料,迴圈結束。
實際表的外觀如下所示:
Name Days
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
如果這種行為令人迷惑,則可以這樣來考慮它:PHP解譯器將用echo 語句替換HTML模式中的每一行,以將該行送入輸出資料流中。如果 echo語句出現在 if/else 結構中,則它將是有條件執行的。如果它出現在一個迴圈結構中(如上所示),則它將重複執行。
3.應用程式概述
Webzine驅動程式,index.php3,有三個主要的組件:主題菜單、故事列表和完整的故事表示。如果讀者選定的主題沒有任何故事,也會顯示一些預設的文本。編輯頁更複雜。它包含一個表單、一個反饋訊息和一個確認訊息,表單用來接受使用者的輸入,反饋訊息來通知作者需要糾正的問題,確認訊息用來向作者顯示他們所提交的內容。它還知道如何驗證所提交的故事,進行必要的更改以確保內容中不包含任何未經認可的HTML,將故事儲存在一個故事檔案中,並更新這個故事相應的菜單檔案。
該應用程式有三種資料檔案:Category.txt包含一個簡單的主題列表,故事就是在這裡組織的。每個主題與一個主題菜單檔案相關聯。第一個主題必須是"Main",並與主題菜單檔案 Main.txt 相關聯。如果第二個主題是 "TheArts",則它與名為 TheArts.txt的主題菜單檔案相關聯。在菜單檔案中,每個故事的資訊單獨佔一行:一個故事編號、一個標題、一個類別、一個簡單的摘要,以及一個可選的映像URL。最後,故事檔案包含一個故事的實際本文。檔案 s1.txt將包含第一個提交的故事,s2.txt包含第二個提交的故事,依此類推。如果您知道一個故事的編號(比如說 26號),則它的檔案名稱很容易確定 (s26.txt)。
4.試用 Webzine!
在您仔細研究這個應用程式之前,請首先試用它。試用 Webzine驅動程式。它的左側是一個主題列表,右側是一個故事列表。您可以選擇一個主題,或者選擇"Main"來查看所有故事。首先出現的是最近的故事列表,第一組故事中如果有映像,同時也會顯示這些映像。當您單擊一個故事的標題時,就是出現一個包含該故事的完整本文的一個頁面。
試用編輯頁(您也可以從Webzine 中試用它)。它提供一個表單,允許您提交一個故事。向 Webzine提交內容時,請注重福士的觀念和好的品味。如果您錄入程式不喜歡的內容,將顯示一條錯誤訊息。一旦故事被接受,您就可以返回Webzine 來查看它在讀者面前是什麼樣子。
現在您已經試用了應用程式,請繼續閱讀後面的部分以瞭解它的建立過程。
4.Webzine 驅動程式
傳遞參數
index.php3 頁允許傳遞參數,如下所示: index.php3?topic=TradeShow&story=33
對於上面的調用,下面的變數賦值將在調用index.php3之前自動進行:
$topic = "TradeShow";
$story = 33;
如果您忽略這些參數,則$topic和$story變數將不存在。您可以顯式地對它們進行檢測,或在您引用它們時讓PHP返回預設的空值。
註:如果這個特性在您的系統上不起作用,請查看 php.ini檔案,確保 register_globals = On。
網頁標題
讓我們首先查看許多PHP應用程式中的一項常用技術;將某些種類的資訊存入程式開頭的變數指派陳述式中。這樣易於以後的維護和更新。
清單 2:變數賦值
同樣,請注意 PHP 的邊界標記: 使您從 HTML模式進入 PHP 模式,而 ?> 切換回 HTML 模式。您可以來回切換任意次。某些操作在 HTML模式下較容易實現,而另外一些操作在PHP模式下較容易實現。您所做的全部事情就是在程式開頭定義兩個變數,然後進入HTML 模式。當需要使用某個變數時,就退回 PHP 模式,並發出一條echo語句將該變數的值直接寫入網頁本文中。
$title = "PHP Demo Webzine";
$slogan = "Illustrating the coolness of PHP since September 2000";
?>
<?php echo($title) ?>
類別菜單
Category.txt檔案只是主題名的一個列表,每個主題名單獨佔一行。例如,如果該檔案只包含三項:
Main
Politics
Technology
您將獲得三個主題菜單檔案:Main.txt、Politics.txt和Technology.txt。一旦選定 "Main"主題,驅動程式就會出現,如下所示:
Main
Politics
Technology
HTML 原始碼如下所示:
下面是從將 Category.txt 編譯為上面所示的 HTML 程式碼片斷的 PHP
原始碼中摘錄出來的相關代碼片斷。首先,將檔案 Category.txt
讀入一個數組 $cats:
$cats = file("category.txt");
$elems = count($cats);
?>
file 函數只是將檔案複製到一個數組中。所以$cats[0] 等於 "Main",$cats[1] 等於"Politics" ,$cats[2] 等於"Technology"。file 函數使匯入一個小 ASCII文字檔變得非常容易,但不要將它用於很大的檔案。count函數統計數組中的元素個數,所以在本例中 $elems 應該等於3。下面說明如何利用那個數組建立上面的HTML表。