糯米文學吧

位置:首頁 > 計算機 > 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