糯米文學吧

位置:首頁 > 計算機 > php語言

PHP高級教程

php語言2.69W

努力向上的開拓,才使彎曲的竹鞭化作了筆直的毛竹。以下是小編為大家搜索整理了PHP高級教程,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

PHP高級教程

PHP 高級教程 PHP Date()PHP 的 date() 函數用於格式化時間或日期。 函數用於格式化時間或日期。PHP Date() 函數PHP Date() 函數可把時間戳格式化為可讀性更好的日期和時間。語法date(format,timestamp) 參數 format timestamp 描述 必需。規定時間戳的格式。 可選。規定時間戳。默認是當前的日期和時間。PHP 日期 - 什麼是時間戳(Timestamp)? 什麼是時間戳( )?時間戳是自 1970 年 1 月 1 日(00:00:00 GMT)以來的秒數。它也被稱為 Unix 時間戳(Unix Timestam) 。PHP 日期 - 格式化日期date() 函數的第一個參數規定了如何格式化日期/時間。它使用字母來表示日期和時間的格式。這裏列出 了一些可用的字母: ? ? ? d - 月中的天 (01-31) m - 當前月,以數字計 (01-12) Y - 當前的年(四位數)您可以在我們的 PHP Date 參考手冊中,找到格式參數中可以使用的所有字母。可以在字母之間插入其他字符,比如 "/"、"." 或者 "-",這樣就可以增加附加格式了:

echo date("Y-m-d"); ?>以上代碼的輸出類似這樣:2006/07/11 2006.07.11 2006-07-11PHP 日期 - 添加時間戳date() 函數的第二個參數規定了一個時間戳。此參數是可選的。如果您沒有提供時間戳,當前的時間將被 使用。在我們的例子中,我們將使用 mktime() 函數為明天創建一個時間戳。mktime() 函數可為指定的日期返回 Unix 時間戳。語法mktime(hour,minute,second,month,day,year,is_dst)如需獲得某一天的時間戳,我們只要設置 mktime() 函數的 day 參數就可以了:以上代碼的輸出類似這樣:明天是 2006/07/12PHP 引用文件用於創建可在多個頁面重複使用的函數、頁眉、頁腳或元素。 服務器端引用 (SSI) 用於創建可在多個頁面重複使用的函數、頁眉、頁腳或元素。

服務器端引用( 服務器端引用(Server Side Includes) )通過 include() 或 require() 函數,您可以在服務器執行 PHP 文件之前在該文件中插入一個文件的內 容。除了它們處理錯誤的方式不同之外,這兩個函數在其他方面都是相同的。include() 函數會生成一個 警告(但是腳本會繼續執行) ,而 require() 函數會生成一個致命錯誤(fatal error) (在錯誤發生後腳本 會停止執行) 。這兩個函數用於創建可在多個頁面重複使用的函數、頁眉、頁腳或元素。這會為開發者節省大量的時間。這意味着您可以創建供所有網頁引用的標準頁眉或菜單文件。當頁眉需要 更新時,您只更新一個包含文件就可以了,或者當您向網站添加一張新頁面時,僅僅需要修改一下菜單文 件(而不是更新所有網頁中的鏈接) 。include() 函數include() 函數可獲得指定文件中的所有文本,並把文本拷貝到使用 include 函數的文件中。例子 1 假設您擁有一個標準的頁眉文件, 名為 ""。 如需在頁面中引用這個頁眉文件, 請使用 include() 函數,就像這樣:

Welcome to my home page

Some text

例子 2 現在,假設我們有一個在所有頁面上使用的標準菜單文件。請看下面這個 "":

Home | About Us | Contact Us三個文件,""、"" 以及 "" 都引用了 "" 文件。這是 "" 中的代碼:

Welcome to my home page

Some text

如果您在瀏覽器中查看 "" 的源代碼,應該類似這樣: Home | About Us | Contact Us

Welcome to my home page

Some text

同時,當然,我們也將用相同的方法處理 "" 和 ""。通過使用引用文件,在您需 要重命名鏈接、更改鏈接順序或向站點添加另一張網頁時,只要簡單地更新 "" 文件中的文本 即可。require() 函數require() 函數與 include() 相同,不同的是它對錯誤的處理方式。include() 函數會生成一個警告(但是腳本會繼續執行) ,而 require() 函數會生成一個致命錯誤(fatal error) (在錯誤發生後腳本會停止執行) 。如果在您通過 include() 引用文件時發生了錯誤,會得到類似下面這樣的錯誤消息:PHP 代碼: 代碼: 錯誤消息: 錯誤消息:Warning: include() [ude]: failed to open stream: No such file or directory in C:homewebsite on line 5Warning: include() [ude]: Failed opening '' for inclusion

(include_path='.;C:php5pear') in C:homewebsite on line 5Hello World!請注意,echo 語句依然被執行了!這是因為警告不會中止腳本的執行。現在,讓我們使用 require() 函數運行相同的例子。PHP 代碼: 代碼: 錯誤消息: 錯誤消息:Warning: require() [ire]: failed to open stream: No such file or directory in C:homewebsite on line 5Fatal error: require() [ire]: Failed opening required '' (include_path='.;C:php5pear') in C:homewebsite on line 5

由於在致命錯誤發生後終止了腳本的執行,因此 echo 語句不會執行。正因為在文件不存在或被重命名後腳本不會繼續執行, 正因為在文件不存在或被重命名後腳本不會繼續執行,因此我們推薦使用 require() 而不是 include()。 。PHP 文件處理fopen() 函數用於在 PHP 中打開文件。 中打開文件。打開文件fopen() 函數用於在 PHP 中打開文件。此函數的第一個參數含有要打開的文件的名稱,第二個參數規定了使用哪種模式來打開文件: 文件可能通過下列模式來打開: 模式 r r+ w w+ a 只讀。在文件的開頭開始。 讀/寫。在文件的開頭開始。 只寫。打開並清空文件的內容;如果文件不存在,則創建新文件。 讀/寫。打開並清空文件的內容;如果文件不存在,則創建新文件。 追加。打開並向文件文件的末端進行寫操作,如果文件不存在, 則創建新文件。 a+ x 讀/追加。通過向文件末端寫內容,來保持文件內容。 只寫。創建新文件。如果文件以存在,則返回 FALSE。 描述

x+讀/寫。創建新文件。如果文件已存在,則返回 FALSE 和一個錯 誤。 註釋:如果 fopen() 無法打開指定文件,則返回 0 (false)。例子 如果 fopen() 不能打開指定的文件,下面的例子會生成一段消息: 關閉文件fclose() 函數用於關閉打開的文件。檢測 End-of-filefeof() 函數檢測是否已達到文件的末端 (EOF)。在循環遍歷未知長度的數據時,feof() 函數很有用。

註釋: 註釋:在 w 、a 以及 x 模式,您無法讀取打開的文件!if (feof($file)) echo "End of file";逐行讀取文件fgets() 函數用於從文件中逐行讀取文件。註釋: 註釋:在調用該函數之後,文件指針會移動到下一行。例子 下面的例子逐行讀取文件,直到文件末端為止:逐字符讀取文件fgetc() 函數用於從文件逐字符地讀取文件。註釋: 註釋:在調用該函數之後,文件指針會移動到下一個字符。例子 下面的例子逐字符地讀取文件,直到文件末端為止:

} fclose($file); ?>PHP 文件上傳通過 PHP,可以把文件上傳到服務器。 ,可以把文件上傳到服務器。創建一個文件上傳表單允許用户從表單上傳文件是非常有用的。請看下面這個供上傳文件的 HTML 表單:

Filename:

請留意如下有關此表單的信息:

標籤的 enctype 屬性規定了在提交表單時要使用哪種內容類型。在表單需要二進制數據時,比 如文件內容,請使用 "multipart/form-data"。 標籤的 type="file" 屬性規定了應該把輸入作為文件來處理。 舉例來説, 當在瀏覽器中預覽時, 會看到輸入框旁邊有一個瀏覽按鈕。

註釋: 註釋:允許用户上傳文件是一個巨大的安全風險。請僅僅允許可信的用户執行文件上傳操作。創建上傳腳本"upload_" 文件含有供上傳文件的代碼: 0) { echo "Error: " . $_FILES["file"]["error"] . "

"; } else { echo "Upload: " . $_FILES["file"]["name"] . "

"; echo "Type: " . $_FILES["file"]["type"] . "

"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb

"; echo "Stored in: " . $_FILES["file"]["tmp_name"]; } ?>通過使用 PHP 的全局數組 $_FILES,你可以從客户計算機向遠程服務器上傳文件。第一個參數是表單的 input name,第二個下標可以是 "name", "type", "size", "tmp_name" 或 "error"。就像這樣: ? ? ? ? ? $_FILES["file"]["name"] - 被上傳文件的名稱 $_FILES["file"]["type"] - 被上傳文件的類型 $_FILES["file"]["size"] - 被上傳文件的大小,以字節計 $_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱 $_FILES["file"]["error"] - 由文件上傳導致的錯誤代碼這是一種非常簡單文件上傳方式。基於安全方面的考慮,您應當增加有關什麼用户有權上傳文件的限制。上傳限制在這個腳本中, 我們增加了對文件上傳的限制。 用户只能上傳 .gif 或 .jpeg 文件, 文件大小必須小於 20 kb:

0) { echo "Error: " . $_FILES["file"]["error"] . "

"; } else { echo "Upload: " . $_FILES["file"]["name"] . "

"; echo "Type: " . $_FILES["file"]["type"] . "

"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb

"; echo "Stored in: " . $_FILES["file"]["tmp_name"]; } } else { echo "Invalid file"; }?>註釋: 註釋:對於 IE,識別 jpg 文件的類型必須是 pjpeg,對於 FireFox,必須是 jpeg。保存被上傳的文件上面的例子在服務器的 PHP 臨時文件夾創建了一個被上傳文件的臨時副本。這個臨時的複製文件會在腳本結束時消失。要保存被上傳的文件,我們需要把它拷貝到另外的位置:

0) { echo "Return Code: " . $_FILES["file"]["error"] . "

"; } else { echo "Upload: " . $_FILES["file"]["name"] . "

"; echo "Type: " . $_FILES["file"]["type"] . "

"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb

"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "

";if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else

{ echo "Invalid file"; } ?>上面的腳本檢測了是否已存在此文件,如果不存在,則把文件拷貝到指定的文件夾。註釋: 註釋:這個例子把文件保存到了名為 "upload" 的新文件夾。PHP Cookiescookie 常用於識別用户。 常用於識別用户。什麼是 Cookie? ?cookie 常用於識別用户。cookie 是服務器留在用户計算機中的小文件。每當相同的計算機通過瀏覽器請 求頁面時,它同時會發送 cookie。通過 PHP,您能夠創建並取回 cookie 的值。如何創建 cookie? ?setcookie() 函數用於設置 cookie。註釋: 註釋:setcookie() 函數必須位於 標籤之前。語法setcookie(name, value, expire, path, domain);例子 在下面的例子中,我們將創建名為 "user" 的 cookie,把為它賦值 "Alex Porter"。我們也規定了此 cookie 在一小時後過期:

註釋: 註釋:在發送 cookie 時,cookie 的'值會自動進行 URL 編碼,在取回時進行自動解碼(為防止 URL 編 碼,請使用 setrawcookie() 取而代之) 。的值? 如何取回 Cookie 的值?PHP 的 $_COOKIE 變量用於取回 cookie 的值。在下面的例子中,我們取回了名為 "user" 的 cookie 的值,並把它顯示在了頁面上:在下面的例子中,我們使用 isset() 函數來確認是否已設置了 cookie:

如何刪除 cookie? ?當刪除 cookie 時,您應當使過期日期變更為過去的時間點。刪除的例子:該怎麼辦? 如果瀏覽器不支持 cookie 該怎麼辦?如果您的應用程序涉及不支持 cookie 的瀏覽器,您就不得不採取其他方法在應用程序中從一張頁面向另 一張頁面傳遞信息。一種方式是從表單傳遞數據(有關表單和用户輸入的內容,稍早前我們已經在本教程 中介紹過了) 。下面的表單在用户單擊提交按鈕時向 "" 提交了用户輸入:

Name: Age:

取回 "" 中的值,就像這樣:

Welcome .

You are years old. PHP SessionsPHP session 變量用於存儲有關用户會話的信息,或更改用户會話的設置。Session 變量保存的信息 變量用於存儲有關用户會話的信息,或更改用户會話的設置。 是單一用户的,並且可供應用程序中的所有頁面使用。 是單一用户的,並且可供應用程序中的所有頁面使用。 所有頁面使用PHP Session 變量當您運行一個應用程序時,您會打開它,做些更改,然後關閉它。這很像一次會話。計算機清楚你是誰。 它知道你何時啟動應用程序,並在何時終止。但是在因特網上,存在一個問題:服務器不知道你是誰以及 你做什麼,這是由於 HTTP 地址不能維持狀態。通過在服務器上存儲用户信息以便隨後使用, PHP session 解決了這個問題 (比如用户名稱、 購買商品等) 。 不過,會話信息是臨時的,在用户離開網站後將被刪除。如果您需要永久儲存信息,可以把數據存儲在數 據庫中。Session 的工作機制是: 為每個訪問者創建一個唯一的 id (UID), 並基於這個 UID 來存儲變量。 UID 存 儲在 cookie 中,亦或通過 URL 進行傳導。開始 PHP Session在您把用户信息存儲到 PHP session 中之前,首先必須啟動會話。註釋: 註釋:session_start() 函數必須位於 標籤之前:

上面的代碼會向服務器註冊用户的會話, 以便您可以開始保存用户信息, 同時會為用户會話分配一個 UID。存儲 Session 變量存儲和取回 session 變量的正確方法是使用 PHP $_SESSION 變量: 輸出:Pageviews=1在下面的例子中, 我們創建了一個簡單的 page-view 計數器。 isset() 函數檢測是否已設置 "views" 變 量。如果已設置 "views" 變量,我們累加計數器。如果 "views" 不存在,則我們創建 "views" 變量, 並把它設置為 1:

終結 Session如果您希望刪除某些 session 數據,可以使用 unset() 或 session_destroy() 函數。unset() 函數用於釋放指定的 session 變量:您也可以通過 session_destroy() 函數徹底終結 session:註釋: 註釋:session_destroy() 將重置 session,您將失去所有已存儲的 session 數據。PHP 發送電子郵件PHP 允許您從腳本直接發送電子郵件。 允許您從腳本直接發送電子郵件。PHP mail() 函數PHP mail() 函數用於從腳本中發送電子郵件。

語法mail(to,subject,message,headers,parameters) 參數 to subject 描述 必需。規定 email 接收者。 必需。規定 email 的主題。註釋:該參數不能包含任何新行 字符。 message headers 必需。定義要發送的消息。應使用 LF (n) 來分隔各行。 可選。規定附加的標題,比如 From、Cc 以及 Bcc。 應當使用 CRLF (rn) 分隔附加的標題。 parameters 可選。對郵件發送程序規定額外的參數。註釋: PHP 需要一個已安裝且正在運行的郵件系統, 以便使郵件函數可用。 所用的程序通過在 文 註釋: 件中的配置設置進行定義。請在我們的 PHP Mail 參考手冊閲讀更多內容。PHP 簡易 E-Mail通過 PHP 發送電子郵件的最簡單的方式是發送一封文本 email。在下面的例子中, 我們首先聲明變量($to, $subject, $message, $from, $headers), 然後我們在 mail() 函數中使用這些變量來發送了一封 e-mail:PHP Mail Form

通過 PHP, 您能夠在自己的站點製作一個反饋表單。 下面的例子向指定的 e-mail 地址發送了一條文本消 息:

?> 例子解釋: 例子解釋: 1 2 3 4 首先,檢查是否填寫了郵件輸入框 如果未填寫(比如在頁面被首次訪問時) ,輸出 HTML 表單 如果已填寫(在表單被填寫後) ,從表單發送郵件 當點擊提交按鈕後,重新載入頁面,顯示郵件發送成功的消息PHP 安全的電子郵件腳本中,存在着一個漏洞。 在上一節中的 PHP e-mail 腳本中,存在着一個漏洞。PHP E-mail 注入首先,請看上一節中的 PHP 代碼:

else //if "email" is not filled out, display the form { echo "

Email:

Subject:

Message:

"; } ?> 以上代碼存在的問題是,未經授權的用户可通過輸入表單在郵件頭部插入數據。假如用户在表單中的輸入框內加入這些文本,會出現什麼情況呢% %, %與往常一樣, mail() 函數把上面的文本放入郵件頭部, 那麼現在頭部有了額外的 Cc:, Bcc: 以及 To: 字 段。當用户點擊提交按鈕時,這封 e-mail 會被髮送到上面所有的地址!PHP 防止 E-mail 注入防止 e-mail 注入的最好方法是對輸入進行驗證。下面的代碼與上一節類似,不過我們已經增加了檢測表單中 email 字段的輸入驗證程序:

else {//send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; ", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else {//if "email" is not filled out, display the form echo "

Email:

Subject:

Message:

"; } ?> 在上面的代碼中,我們使用了 PHP 過濾器來對輸入進行驗證: ? ? FILTER_SANITIZE_EMAIL 從字符串中刪除電子郵件的非法字符 FILTER_VALIDATE_EMAIL 驗證電子郵件地址您可以在我們的 PHP 過濾器這一節中閲讀更多有關過濾器的內容。

PHP 錯誤處理默認的錯誤處理很簡單。一條消息會被髮送到瀏覽器,這條消息帶有文件名、 在 PHP 中,默認的錯誤處理很簡單。一條消息會被髮送到瀏覽器,這條消息帶有文件名、行號以及一條 描述錯誤的消息。 描述錯誤的消息。PHP 錯誤處理在創建腳本和 web 應用程序時,錯誤處理是一個重要的部分。如果您的代碼缺少錯誤檢測編碼,那麼程 序看上去很不專業,也為安全風險敞開了大門。本教程介紹了 PHP 中一些最為重要的錯誤檢測方法。我們將為您講解不同的錯誤處理方法: ? ? ? 簡單的 "die()" 語句 自定義錯誤和錯誤觸發器 錯誤報告基本的錯誤處理: 基本的錯誤處理:使用 die() 函數第一個例子展示了一個打開文本文件的簡單腳本:如果文件不存在,您會獲得類似這樣的錯誤:Warning: fopen() [n]: failed to open stream: No such file or directory in C:webfolder on line 2為了避免用户獲得類似上面的錯誤消息,我們在訪問文件之前檢測該文件是否存在:

{ $file=fopen("","r"); } ?>現在,假如文件不存在,您會得到類似這樣的錯誤消息:File not found比起之前的代碼,上面的代碼更有效,這是由於它採用了一個簡單的錯誤處理機制在錯誤之後終止了腳本。不過,簡單地終止腳本並不總是恰當的方式。讓我們研究一下用於處理錯誤的備選的 PHP 函數。創建自定義錯誤處理器創建一個自定義的錯誤處理器非常簡單。我們很簡單地創建了一個專用函數,可以在 PHP 中發生錯誤時 調用該函數。該函數必須有能力處理至少兩個參數 (error level 和 error message), 但是可以接受最多五個參數 (可 選的:file, line-number 以及 error context) :語法error_function(error_level,error_message, error_file,error_line,error_context) 參數 error_level 描述 必需。為用户定義的錯誤規定錯誤報告級別。必須是一個值數。 參見下面的表格:錯誤報告級別。 error_message error_file error_line error_context 必需。為用户定義的錯誤規定錯誤消息。 可選。規定錯誤在其中發生的文件名。 可選。規定錯誤發生的行號。 可選。規定一個數組,包含了當錯誤發生時在用的每個變量以及 它們的值。錯誤報告級別

這些錯誤報告級別是錯誤處理程序旨在處理的錯誤的不同的類型: 值 2 8 常量 E_WARNING E_NOTICE 描述 非致命的 run-time 錯誤。不暫停腳本執行。 Run-time 通知。 腳本發現可能有錯誤發生,但也可能在腳本正常運行時發生。 256 E_USER_ERROR 致命的用户生成的錯誤。這類似於程序員使用 PHP 函數 trigger_error() 設置的 E_ERROR。 512 E_USER_WARNI NG 1024 E_USER_NOTICE 非致命的用户生成的警告。這類似於程序員使用 PHP 函數 trigger_error() 設置的 E_WARNING。 用户生成的通知。這類似於程序員使用 trigger_error() 設置的 E_NOTICE。 4096 E_RECOVERABL E_ERROR 8191 E_ALL 可捕獲的致命錯誤。類似 E_ERROR,但可被用户定義的處理 程序捕獲。(參見 set_error_handler()) 所有錯誤和警告,除級別 E_STRICT 以外。 (在 PHP 6.0,E_STRICT 是 E_ALL 的一部分) PHP 函 數現在,讓我們創建一個處理錯誤的函數:function customError($errno, $errstr) { echo "Error: [$errno] $errstr

"; echo "Ending Script"; die(); }上面的代碼是一個簡單的錯誤處理函數。當它被觸發時,它會取得錯誤級別和錯誤消息。然後它會輸出錯 誤級別和消息,並終止腳本。現在,我們已經創建了一個錯誤處理函數,我們需要確定在何時觸發該函數。Set Error HandlerPHP 的默認錯誤處理程序是內建的錯誤處理程序。 我們打算把上面的函數改造為腳本運行期間的默認錯誤 處理程序。

可以修改錯誤處理程序,使其僅應用到某些錯誤,這樣腳本就可以不同的方式來處理不同的錯誤。不過, 在本例中,我們打算針對所有錯誤來使用我們的自定義錯誤處理程序:set_error_handler("customError");由於我們希望我們的自定義函數來處理所有錯誤,set_error_handler() 僅需要一個參數,可以添加第二 個參數來規定錯誤級別。實例 通過嘗試輸出不存在的變量,來測試這個錯誤處理程序:以上代碼的輸出應該類似這樣:Custom error: [8] Undefined variable: test觸發錯誤在腳本中用户輸入數據的位置,當用户的輸入無效時觸發錯誤的很有用的。在 PHP 中,這個任務由 trigger_error() 完成。例子

在本例中,如果 "test" 變量大於 "1",就會發生錯誤:1) { trigger_error("Value must be 1 or below"); } ?>以上代碼的輸出應該類似這樣:Notice: Value must be 1 or below in C:webfolder on line 6您可以在腳本中任何位置觸發錯誤,通過添加的第二個參數,您能夠規定所觸發的錯誤級別。可能的錯誤類型: 可能的錯誤類型: ? ? ? E_USER_ERROR - 致命的用户生成的 run-time 錯誤。錯誤無法恢復。腳本執行被中斷。 E_USER_WARNING - 非致命的用户生成的 run-time 警告。腳本執行不被中斷。 E_USER_NOTICE - 默認。用户生成的 run-time 通知。腳本發現了可能的錯誤,也有可能在腳本運行正常時發生。 例子 在本例中,如果 "test" 變量大於 "1",則發生 E_USER_WARNING 錯誤。如果發生了 E_USER_WARNING,我們將使用我們的自定義錯誤處理程序並結束腳本:

標籤:PHP