PHP 運作原理 (1) PHP : Server 端的描述語言, 主要的目的是用來製作動態網頁 開放原始碼 (Open Source) 而且是跨平台的伺服端描述語言 建立成一個 Apache 模組時,PHP 能夠快速執行地, 不需像 CGI 需要產生新的 process 執行 可以用來傳送 HTTP 表頭, 也可以設定 Cookies, 做授權管理, 以及將使用者重新導向至新的頁面 1
PHP 運作原理 (1) 2
PHP 運作原理 (2) 3
PHP Apache MySQL 合作原理 (1) User 4
PHP Apache MySQL 合作原理 (1) 使用者透過 PHP 存取 MySQL 資料庫內容的流程 : 1. 使用者向 Apache 要求 PHP 相關網頁 (.php) 2. 當 Apache 收到這個要求, 經判斷, 把此要求轉交給 PHP 直譯器負責 3. PHP 直譯器解譯此網頁的 PHP 語法, 當遇到 My SQL 相關的函式, 則把 Request 間接傳遞給 My SQL 4. My SQL 把所要求的結果反傳回 PHP 5. PHP 直譯器把此結果包裝成 Apache 看得懂的 Html 語法, 後傳回給 Apache 6. Apache 把此結果 ( 已被 PHP 處理成 Html) 傳回給使用者的 browser 5
PHP Apache MySQL 合作原理 (2) PHP 主要透過四個主函式來達成和 MySQL 溝通 : 6
PHP 語法 (1) 7
PHP 語法 (2) 第 1-3 行 : 變數宣告 :$NAME = VALUE; NAME 為任何非數字開頭的字串, 再加上 $ 字號而成變數, 而 VALUE 則可為任意的數值或是字串等, 並不受限制, 習慣上字串會用引號括起來 第 4 行 :echo 是 PHP 內定的函式, 用來把函式後括號內的式子輸出 字串其實是 Array 的變形, 所以在第 3 行中,b[1] 直接對應 b 字串的第二個單字, 因為 PHP 的 array 和 C 是一樣的, 索引都從 0 開始 除了數字可作加法外,PHP 的字串也可用來相加 (Concatenation), 只需在變數中間用. 標示出來即可 第 5 行 :php 裡的注解可用 C(/* */) 和 C++( // ) 兩種格式 8
PHP 語法 (2) 第 6 行 : 使用者可自行定義自已的函式, 形式如 : function ([ variables ]) {.. } Function 裡定義的變數皆為 區域變數,Function 外的變數則為 全域變數 若要使區域變數為引用全域變數, 只需在變數定義前加上 Global 第 10-17 行 : 迴圈控制 : for(expr1, expr2, expr3) statement while(expression) statement 所以可以把此 While 改寫成 :for ( $I = 1; $I <= $a; $I++) {.. } do while 也是迴圈控制的形式, 不過和 While 最大的分別是,do while 一定會先執行一次, 不論條件成不成立 9
PHP 語法 (3) 第 11-15 行 : 條件判斷 :if (expression) statement elseif(expression) statement else statement 也可以用 switch case 也改寫, 如下 : switch($i) { case 4 :. Default:. 其中,Case 是假設有多種條件式, 當沒有吻和條件時, 就執行 Default 這個預設式 10
PHP 程式設計主要概念 HTML 主要是用 GET 和 POST 兩種方法傳遞 Browser 到 HTTP Server 的變數,PHP 就是利用這個來收取 Client 傳過來的參數 GET 變數 : 當 Web server 收到一組利用 GET 的方法來傳遞變數的請求時, 則 php 會產生一組告為 $_GET 的全域關連性陣列 (global hash) 來儲存這些變數的資料 把網頁上的 <Form> </Form> 包進 HTTP 的 Request Header 裡, 而成網址 (URL) 的一部份 POST 變數 : 用 post 當變數傳遞的方式, 也是產生一個全域關連性陣列, 取名為 $_POST 把 <FORM> </FORM> 裡面的變數包進此 Request 裡的內容中, 而不是像 GET 的做法是把變數加到 Header 裡, 這個作法的好處是所要傳遞的資料可以很大, 而不會因 HTTP 的 Header 的大小而限制 11
Cookie 簡介 Cookie: 儲存在 Browser 端的名稱變數, 用來記綠所屬 Browser 和 Server 端的連線狀態 包裝在 HTTP 的 Response Header, 透過 HTTP Response 中的 Set-Cookie Header 欄位來達成 Cookie 皆有其存活的時間,Browser 包裝此 Cookie 在一系列的 Request 裡, 直到其到期為止 Cookie Manager: Domain 參數限制了此 cookie 所能被傳遞的站台 (Site), 假如此參數沒有設定, 那此 Cookie 只能在設定此 cookie 的站台 (Site) 運作 若 Browser 所要求的網頁沒有在 Path 參數所允許的路徑或其子路徑下, 則 Cookie 不會被包裝在其 Request 封包裡 這在限制一個 Web 站台下的某些目錄才能執行 Cookie, 很有用 Secure 的欄位, 使其 browser 在傳送此 Cookie 時, 利用 SSL(SecureSockets Layer Protocol) 來做一個安全化的連線 12
Session 簡介 (1) Session: 利用對應到每一個使用者的 Session 變數來識別和管理的方法 當 Session 起始時, 此 Client 會有一個 Session 識別碼, 用來加進接下來一連串的 Request 裡, 通常這個識別碼是個 Cookie 相較於把所有需要去維護的變數及其值加入每一個請求 (Request),Browser 只儲存了單一個 Session 識別碼, 用來尋找和初始在 Web Server 上面存放的變數 Session 管理上的特性 : 資訊或狀態需被儲存, 例如, 在多個請求 (Requests) 下, 信用卡的卡號需被小心維護 每一個 HTTP 請求 (Request) 必須含有一個識別碼, 使主機能用來處理此請求 (Request) 的內容 Session 皆需有一個 Timeout 值, 否則, 當使用者一離開此網站, 就沒有方法能去終結此 Session 13
Session 簡介 (2) Session 運作方式 : 在使用 Session 機制的 web 主機上, 當使用者對開啟 Session 的網頁作第一次的請求 (Request) 時,PHP 產生一個 Session ID 及創造一個用來存放 Session 相關變數的檔案,PHP 設定一個存有 Session ID 的 Cookie, 回應 (Response) 給 Browser 這個 Browser 把此 Cookie 變數記錄下來, 且把此 Cookie 加在接下來一連串的 Request 裡 14
Session 運作方式 Get Login.php?name=World Web browser 201 OK Set-Cookie: PHPSESSID=12345 Get /page.php Cookie: PHPSESSID=12345 HTTP Server Session Store Web Server Web browser 201 OK <html>welcome, World</html> 15 HTTP Server Session Store Web Server
PHP 的 Session 管理 PHP Session 管理 : 利用 disk-base 為主的檔案來存放變數, 另一常見的方式是利用資料庫的方式 1. 開啟 Session: 第一次 PHP script 呼叫 session_start(), 一個 session 識別碼被產生, 且一個 Set-Cookie Header 欄位被加入回應 (response) 封包裡 建立一個名叫 PHPSESSID 的 session cookie, 且其值就是這個 session 的識別碼是一 32 個十六進位數字所組成的字串 PHP 的 session 管理機制自動把此 cookie 加入回應 (response) 裡頭, 而不用呼叫 setcookie() 或 header() 兩函式 16
PHP 的 Session 管理 2. 使用 Session 變數 : 被 session 使用的變數需使用 session_register() 函式來註冊 (register) 用 session_unregister() 函式來移除 Session 變數可以是 Boolean 整數 (integer) double 字串 (string) 物件或陣列等 php 允許的變數形態 3. 結束 Session: 在某些時候, 假如使用者登出時,script 能呼叫 session_destroy() 函式把所屬的 session 從系統消除掉, 但沒有移除在 browser 裡的 PHPSESSID cookie, 直到此 browser 被關閉 17
Cookie 及 Session 實例解析 (1) Session 及 Cookie 都是為了追蹤使用者所運育而生的機制, 兩者最主要的差異是 :Cookie 是把記錄儲存在 Client 端, 而 Session 卻把記錄反置於 Server 端 cookie: 若有一 php 檔 (cookie.php), 內容如下 : 18
Cookie 及 Session 實例解析 (1) 在使用者第一次要求此網頁時,Server 在回應 (Response) 結果的過程中, 會在 HTTP 的回應 Header (Response header) 裡, 多一個 Set- Cookie 的欄位, 然後把 Cookie 填入 而當 PHP 在執行的過程中, 若有動到此 Cookie 變數, 則 Web Server 在回應 (Response) 的過程中, 又利用 Set-Cookie 的欄位重設此 Cookie 的值 19
Cookie 及 Session 實例解析 (2) (1) 則當使用者向 Web Server 要求此網頁時 Set Cookie Packet 20
Cookie 及 Session 實例解析 (3) (2) 使用者重覆向 Web Server Request 此網頁 Re-Request Packet 內容 21
Cookie 及 Session 實例解析 (4) Session: 若有一 PHP 檔 (Session1.php) 如下 : 22
Cookie 及 Session 實例解析 (5) (1) 當使用者第一次向 Web Server Request 此網頁 Set Cookie Packet 23
Cookie 及 Session 實例解析 (6) (2) 在接下來的進一步 Request,Bowser 會自動把此 Cookie 加在請求 Header (Request Header) 裡 設定 Cookie 後, 之後的傳送自動將 Cookie 加入, 此 Cookie 就是用來取得位在 Server 端的 Session 檔 24
Cookie 及 Session 實例解析 (6) 25