什麼是 PHP? :office" /> PHP 是一種伺服端描述語言,用來製作動態網頁。當一個網客開啟網頁時,伺服端便會處理 PHP 指令,然後把其處理結果送到網客的網頁瀏覽器上面。就好像 ASP 或者是 ColdFusion 一樣。然而,PHP 跟 ASP 或者是 ColdFusion 不一樣的地方在於,它是開放原始碼 (Open Source) 而且是跨平台的。PHP 可以在 Windows NT 以及很多不同的 Unix 版本執行,它也可以被建成一個 Apache 模組,或者是一個 CGI 的二元檔案(binary)。當被建成一個 Apache 模組時,PHP 是特別的輕巧而快速。在這種情況下,它沒有繁瑣的程序產生的負擔,因此可以很快的把結果跑出來,而且你也不需要特別為了保持伺服器不會佔太大的記憶體空間,而去調整 mod_perl。 除了能夠用來產生你的網頁的內容之外,PHP 也可以用來傳送 HTTP 表頭(header)。你可以設定 cookies,做授權管理,以及將使用者重新導向至新的頁面(redirect users)。它也提供了優良的資料庫連結功能(還有 ODBC 的連結功能),另外還有提供與各式各樣的外部檔案庫(library),可以讓你用來做幾乎所有的事情,上至產生 PDF 文件,下至解析 XML。 PHP 程式碼就在你的網頁中,因此你不必為它建立一個開發環境或整合性開發環境(IDE)。你用 <?php 開始一段 PHP 程式,然後以 ?> 做結束。(你也可以將 PHP 設定成使用 ASP 形式的 <% %> tag 甚至是用 <SCRIPT LANGUAGE="php"></SCRIPT>。) PHP 引擎會處理 tag 之間的任何東西。 PHP 語言的語法跟 C 還有 Perl 很像。在使用變數前,你不必先宣告他們。要建立陣列(array)以及雜湊(hash)或關聯性陣列也很快。 PHP 甚至還有一些基本的物件導向功能,幫助你組織以及封裝(encapsulate)你的程式。 雖然當嵌入 Apache 裡面時,PHP 跑得最快,但是在 PHP 網站上還是有些操作指南教你如何讓它能夠天衣無縫的與 Microsoft IIS 以及 Netscape Enterprise Server 結合。如果你手邊還沒有 PHP,你可以在它的官方網站下載取得。 你也會在那裡找到一份紀錄所有 PHP 功能以及特色的手冊。 PHP 語法 PHP 的基本語法看起來很熟悉。 <?php echo "Hello, World!"; ?> 產生如下結果 Hello, World! 變數則以 $ 為開端。你可以將上面的 "Hello, World!" 寫成這樣: <?php $message = "Hello, World!"; echo $message; ?> 字串的串聯(concatenation)則是用 .(一個英文句點)標示出來;其他有關數字的運算符號就如同你所預期的一樣: <?php $greeting = "Hello "; $num = 3 + 2; $num++; echo "$greeting $num people!"; ?> 會產生如下結果 Hello 6 people! PHP 有全套的運算元(operator),它們的運作方式就如同你所預期的一樣 -- 特別是當你有 C 或者 C++ 的知識背景時。使用 PHP 的最高指導原則:「有疑問時,先試看看;你可能會成功。」 正如 Perl 一樣,一個字串用雙引號括起來,會使得其中的變數被置換(interpolate),而如果以單引號括起來,則變數不會被置換。因此, <?php $name = 'Susannah'; $greeting_1 = "Hello, $name!"; $greeting_2 = 'Hello, $name!'; echo "$greeting_1\n"; echo "$greeting_2\n"; ?> 產生如下結果 Hello, Susannah! Hello, $name! 注意一下,字串中 \n 字元是換行符號,就跟 Perl 或 C 一樣。不過這只在以雙引號括起來的字串內才有效。 變數 PHP 可以讓你把環境變數當作一般變數使用。這包括伺服器為了一個 CGI 程式所設定的環境變數(即使當你以模組的方式執行 PHP,也是如此)。因此, 如果這個網頁 "http://www.domain.com/farm/cattle/cow-cow.cow.html" 包含以下程式碼 <?php echo "[$REQUEST_URI]"; ?> 它會印出 [/farm/cattle/cow-cow-cow.html] 陣列(array) 你用方形括弧([ and ]), 指定陣列(一般或關聯性)的索引: $fruit[0] = 'banana'; $fruit[1] = 'papaya'; $favorites['animal'] = 'turtle'; $favorites['monster'] = 'cookie'; 如果你授與陣列一些值,但是索引是空白的,PHP 會把這個值所代表的物件設定到陣列的尾端。上面所列有關 $fruit 這個變數,以下面的方式授與變數值,其結果是一樣的: $fruit[] = 'banana'; $fruit[] = 'papaya'; 你也可以用多維陣列: $people['David']['shirt'] = 'blue'; $people['David']['car'] = 'minivan'; $people['Adam']['shirt'] = 'white'; $people['Adam']['car'] = 'sedan'; 一個建立陣列的捷徑為 array() 函數: $fruit = array('banana','papaya'); $favorites = array('animal' => 'turtle', 'monster' => 'cookie); 你也可以 $people = array ('David' => array('shirt' => 'blue', 'car' => 'minivan'), 'Adam' => array('shirt' => 'white', 'car' => 'sedan')); count() 內建函數是用來告訴你一個陣列裡面有多少元素: $fruit = array('banana','papaya'); print count($fruit); 得到如下結果 控制結構 你可以利用迴圈結構例如 for 還有 while: for ($i = 4; $i < 8; $i++) { print "I have eaten $i bagels today.\n"; } 產生如下結果 I have eaten 4 bagels today. I have eaten 5 bagels today. I have eaten 6 bagels today. I have eaten 7 bagels today. 還有以下程式碼也會產生同樣結果 $i = 4; while ($i < 8) { print "I have eaten $i bagels today.\n"; $i++; } 你可以利用控制結構 if 以及 elseif: if ($user_count > 200) { print "The site is busy right now!"; } elseif ($user_count > 100) { print "The site is sort of active right now!"; } else { print "The site is lonely - only $user_count user logged on."; } 運算元(operator)利用的最高指導原則同樣也可以運用在控制結構上面. 你還可以使用 switch, do...while,甚至是 ?: 程式結構。 一個簡單的表單 PHP 最方便的功能之一是,它能夠自動將表單(form)裡面的值塞到 PHP 的變數裡面。使得表單處理變得非常迅速。 因此,如果你送出一個內含輸入欄位值的表單如下: <INPUT TYPE=TEXT NAME="name" VALUE="Glen Morris"> 當你以 PHP 處理這個網頁,$name 這個變數的值就會是 Glen Morris。 因此,你可以用如下的方式把值印出來: echo "Hi $name!"; 或者像這樣測試它的值: if ($name == "Glen Morris") { echo "Please check your email."; } 在這裡提供一個以 PHP 來處理基本表單的好方法。讓我們以範例來做說明,假設我們必須做一個簡單的問卷調查,填卷者必須填入他們的姓名,電子郵件住址, 以及回答一些我們感興趣而想調查的問題。 首先,我們會將網頁拆成兩個函數。因此,我們只要有一個 PHP 網頁,然後用程式邏輯去控制要給網客看的是什麼,就可以了。我們不用去寫兩個分開的網頁 (一個是表單部分,另外一個是用來處理表單的 CGI 程式)。 顯示表單 第一個函數用來顯示表單: <?php function display_form() { global $PHP_SELF; ?> <FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET> Name: <INPUT TYPE=TEXT NAME="name"><BR> Favorite Cheese: <INPUT TYPE=RADIO NAME="cheese" VALUE="brie">Very soft French Brie <INPUT TYPE=RADIO NAME="cheese" VALUE="cheddar">Farmhouse English Cheddar <INPUT TYPE=RADIO NAME="cheese" VALUE="mozzarella">Italian Buffalo Mozzarella Favorite Times to Eat Cheese: <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="m">Morning <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="n">Noon <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="d">Dinner <INPUT TYPE=CHECKBOX NAME="times[]" VALUE="l">Late night <INPUT TYPE=HIDDEN NAME="stage" VALUE="results"> <INPUT TYPE=SUBMIT VALUE="Thanks!"> </FORM> <?php } ?>
以上程式雖然大部分都只是產生表單所需的 HTML 程式,然而,還是有一些複雜的地方是我們必須加以說明的。 首先是 $PHP_SELF 變數。$PHP_SELF 變數是一個很方便的參考變數 -- 它的值就是目前網頁的 URL。我們把這個表單的 TARGET 設為 $PHP_SELF,因為我們要讓該網頁處理這個表單。藉由使用 $PHP_SELF 變數而非該網頁實際的固定路徑,我們可以任意將這個程式改名或更動位置, 而不必擔心每次用到這段程式碼時,都要特別去設定網頁的位置。 順帶一提,以下這一行 global $PHP_SELF; 的意思是說,我們要拿到 $PHP_SELF 這個全域變數。 在函數裡面所宣告的變數的範圍是區域性的(local scope),或者說,它能夠與在函數外面宣告的同名變數有不同的值。如果我們沒有明白的告知 PHP
|