進階 WWW 程式設計 -- PHP 簡介 靜宜大學資訊管理學系 蔡奇偉副教授 2003 -2007 2018/12/9 進階 WWW 程式設計 PHP 簡介 靜宜大學資訊管理學系 蔡奇偉副教授 2003 -2007 靜宜大學資管系 蔡奇偉編撰 版權所有 2003
內容大綱 Server-side Web Programming PHP 是什麼? PHP 發展簡史 PHP 的特點 PHP 程式的執行方式
Server-side Web Programming Client Server Resources Request Response HTTP DBMS CGI PHP ASP JSP Apache or IIS Files Programs ColdFusion MX WWW Server
Server-side 程式技術 Common Gateway Interface (CGI) PHP CGI 定義 WWW 伺服器與應用程式間的資料交流規範。符合這種規範的程式通稱為 CGI 程式。大部分的 CGI 程式是用 Perl 或 C/C++ 來撰寫。 PHP PHP 是一種嵌入在網頁 HTML 原始檔中的程式語言。利用 PHP 直譯器執行網頁中的 PHP 程式而產生動態的網頁內容。 (http://www.php.net)
Active Server Pages (ASP) ASP 是微軟公司所發展的一種類似 PHP 的技術。你可以用 VBScript 或 JScript 來撰寫嵌入在網頁 HTML 原始檔中的程式。微軟的直譯器執行網頁中的程式後就能產生出動態的網頁內容。 (http://msdn.microsoft.com) JavaServer Pages (JSP) JSP 是昇陽公司配合 Java 所發展的一種伺服端網頁程式技術。 (http://java.sun.com/products/jsp/)
PHP 是什麼? PHP 原來是 Personal Homepage Preprocessor 三個英文字的縮寫,現在則被遞迴性地定義成 PHP: Hypertext Preprocessor 的縮寫。 PHP 是一套電腦程式語言,主要用來產生 HTML 格式的網頁內容。 PHP 的程式碼是寫在 HTML 原始檔中,和網頁的文字內容共存。 PHP 也可當作 command-line scripting,而具有像 Perl, awk 或 Unix shell 這類工具程式的功能。 配合 PHP-GTK 套件可用來撰寫圖形介面的應用程式。
PHP 發展簡史 1995: Rasmus Lerdorf 為了記錄有誰看了他的覆歷表網頁而寫了 PHP 的第一個版本。 1996: Rasmus Lerdorf 發表 PHP 2 (PHP/FI) 。 1997: Zeev Suraski 和 Andi Gutmans 加入 PHP 的發展,他們重新改寫 PHP 的直譯器引擎,提高 PHP 程式執行效率。 1998: PHP 3 問世,內部使用了 Zeev Suraski 和 Andi Gutmans 所寫的 Zend 語言引擎。 2000: PHP 4 問世。 2004: PHP 5 改善 PHP 的物件導向方面的效率。
PHP 名人堂 Rasmus Lerdorf Zeev Suraski Andi Gutmans
PHP 的特點 PHP 是 Open Source 的軟體。 PHP 的語法類似 C/C++ 和 Perl。如果你已經熟悉這些語言,應該能很容易地學會它。 PHP 提供完善的資料庫處理函式,透過這些函式我們可以在網頁程式中存取市面上絕大部分的資料庫系統。 PHP 具有強大的字串處理功能。 PHP 提供豐富的函式用來滿足處理網路、繪圖、壓縮、XML、…、等等的需求。
PHP 程式的執行方式 Request from clients 呼叫對應的 MIME 處理程式來處理(大部分是由 WWW 伺服器找到檔案後,回傳給客戶端) .php? No Yes WWW 伺服器呼叫 PHP 直譯器來執行此 PHP 網頁 WWW 伺服器
PHP 的程式碼用標籤 <?php 和 ?> 包夾起來加在網頁中,所以 PHP 直譯器用以下的流程來處理 PHP 網頁: No 是一般的 HTML 網頁內容,因此直接輸出給 WWW 伺服器,然後回傳至客戶端。 Yes Yes ?> 標籤? No 執行 PHP 程式行 PHP 直譯器
一些 PHP 程式範例 Hello, PHP 顯示日期 顯示中文星期 依星期顯示不同訊息 九九乘法表 表單的處理 資料庫的處理
範例一:Hello, PHP <html> 網頁中的 PHP 程式碼必須擺在<?php 和 ?> 這兩個標籤之間。 <head> <title>Hello PHP</title> </head> <body> <?php echo "Hello, PHP!"; ?> </body> </html> 網頁中的 PHP 程式碼必須擺在<?php 和 ?> 這兩個標籤之間。 echo 是 PHP 的內建指令。它的功能是把其後所跟的字串參數輸出至指令所在的網頁位置。 效果等同於在此直接輸入字串: Hello, PHP!
在瀏覽器上顯示的結果如下:
範例二:顯示日期 <html> <head> 進階 WWW 程式設計 -- PHP 簡介 範例二:顯示日期 2018/12/9 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=big5"> <title>date</title> </head> <body> <p> 今天是 <?php echo date("l, m/j/Y"); ?> </p> </body> </html> 中文網頁必須加上這一行的字碼設定,否則在瀏覽器上會造成亂碼 date 是 PHP 內建的函式,它可用來產生 WWW 伺服器所在地的日期與時間。 靜宜大學資管系 蔡奇偉編撰 版權所有 2003
在瀏覽器上顯示的結果如下:
範例三:顯示中文星期 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=big5"> <title>Date2</title> </head> <body> <p> 今天是星期 <?php $weekdays = array('日', '一', '二', '三', '四', '五', '六'); echo $weekdays[date('w')] . ', ' . date("m/j/Y"); ?> </p> </body> </html>
在瀏覽器上顯示的結果如下:
程式說明 $weekdays = array('日', '一', '二', '三', '四', '五', '六'); 利用 array 指令把變數 $weekdays 設定成一個索引型的陣列,其中依序存入字串 ‘日’, ‘一’, …, ‘六‘ 等星期的名稱,即 $weekdays[0] = ‘日’; $weekdays[1] = ‘一’; … 註:PHP 變數的名稱都必須以字元 $ 起頭。 echo $weekdays[date('w')] . ', ' . date("m/j/Y"); date(‘w’) 這個函式傳回星期的序數:0 是星期天、1 是星期一、…等等,依此類推。拿這個函式值當 $weekdays 陣列的索引值即可得到相對的中文星期名稱。我們用字串合併運算子 (.) 把三個字串 $weekdays[date(‘w’)]、‘, ’ 、和 date(“m/j/Y”) 結合成一個字串,然後再用 echo 指令輸出到網頁。
範例四:依星期顯示不同訊息 <html> <!-- 同前例,省略 --> <p> 今天是星期 <?php $weekdays = array('日', '一', '二', '三', '四', '五', '六'); $wd = date('w'); echo $weekdays[$wd] . ', ' . date("m/j/Y"); if ($wd == 5) // Friday echo '</p><p>萬歲!明天是週末'; else echo '</p><p>唉!苦日子什麼時候過完?'; ?> </p>
在瀏覽器上顯示的結果如下:
範例五:九九乘法表 <h2 align="center">九九乘法表</h2> <table border="1" align="center" cellpadding="6" cellspacing="0"> <?php echo '<tr align="right" bgcolor="#CCCCCC"><th>*</th>'; for ($i = 1; $i <= 9; $i++) echo "<th>$i</th>"; echo "</tr>\n"; for ($i = 1; $i <= 9; $i++) { echo "<tr align=\"right\"><th bgcolor=\"#CCCCCC\">$i</th>"; for ($j = 1; $j <= 9; $j++) echo '<td>' . $i * $j . '</td>'; } ?> </table>
在瀏覽器上顯示的結果如下:
程式說明 // 輸出左上角的標題格 * echo '<tr align="right" bgcolor="#CCCCCC"><th>*</th>'; // 輸出第一列的標題格: 1, 2, …, 9 for ($i = 1; $i <= 9; $i++) echo "<th>$i</th>"; echo "</tr>\n"; // 逐列地輸出九九乘法表內容 for ($i = 1; $i <= 9; $i++) { // 輸出第 i 列最左邊的標題格 echo "<tr align=\"right\"><th bgcolor=\"#CCCCCC\">$i</th>"; // 輸出第 i 列的乘積 for ($j = 1; $j <= 9; $j++) echo '<td>' . $i * $j . '</td>'; }
範例六:表單的處理
表單的 HTML 原始檔: <form action="formex1.php" method="post"> <p> 姓: <input type="text" name="lastname" size="4"> 名: <input type="text" name="firstname" size="8"> </p> <p>性別: <input type="radio" name="sex" value="male"> 男 <input type="radio" name="sex" value="female"> 女 <input type="submit" name="Submit" value=" 送出 "> <input type="reset" name="Reset" value=" 重設 "> </form>
網頁說明 用 POST 的方式來傳送表單資料 <form action="formex1.php" method="post"> <input type="text" name="lastname" size="4"> 設定此輸入欄的名稱,使PHP 程式可以用這名稱來取得此欄的資料 <input type="radio" name="sex" value="male"> 設定此圓鈕欄的值。若瀏覽者選取此圓鈕,此值會回傳至 WWW 伺服器,PHP 程式因而可辨識出瀏覽者所選取的圓鈕為何
處理表單的 PHP 網頁 formex1.php <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=big5"> <title>處理表單範例一</title> </head> <body> <?php $lastname = $_POST['lastname']; $sex = $_POST['sex']; echo '<p>' . $lastname . (($sex == 'male')? '先生' : '小姐' ) . ' 歡迎光臨本站</p>'; ?> </body> </html>
程式說明 $_POST 是 PHP 內建的一個對照陣列(associative array),其中儲存使用 POST 方法傳回的表單資料。在本範例中,若表單的輸入如右圖所示,則 $_POST 內容如下: ‘lastname’ ‘陳’ ‘firstname’ ‘水扁’ ‘sex’ ‘male’ 所以 $lastname = $_POST[‘lastname’]; 這行程式的用意是取出表單中名稱為 ‘lastname’ 輸入欄的值,並存入變數 $lastname 中。執行後, $lastname 的值將為 ‘陳’。