




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、PHP 學習筆記(四):高級教程:Cookies,Sessions,郵件,錯誤處理,異常處理,過濾器PHP Cookiescookie 常用于識別用戶。什么是 Cookie?cookie 常用于識別用戶。cookie 是服務器留在用戶計算機中的小文件。每當相同的計算機通過瀏覽器請求頁面時,它同時會發(fā)送 cookie。通過 PHP,您能夠創(chuàng)建并取回 cookie 的值。如何創(chuàng)建 cookie?setcookie() 函數用于設置 cookie。 注釋:setcookie() 函數必須位于 <html> 標簽之前。語法setcookie(name, value, expire, pat
2、h, domain);1例子在下面的例子中,我們將創(chuàng)建名為 “user” 的 cookie,把為它賦值 “Alex Porter”。我們也規(guī)定了此 cookie 在一小時后過期:<?php setcookie("user", "Alex Porter", time()+3600);?><html><body></body></html>注釋:在發(fā)送 cookie 時,cookie 的值會自動進行 URL 編碼,在取回時進行自動解碼(為防止 URL 編碼,請使用 setrawcookie() 取而
3、代之)。如何取回 Cookie 的值?PHP 的 $_COOKIE 變量用于取回 cookie 的值。在下面的例子中,我們取回了名為 “user” 的 cookie 的值,并把它顯示在了頁面上:<?php/ Print a cookieecho $_COOKIE"user"/ A way to view all cookiesprint_r($_COOKIE);?>在下面的例子中,我們使用 isset() 函數來確認是否已設置了 cookie:<html><body><?phpif (isset($_COOKIE"user
4、") echo "Welcome " . $_COOKIE"user" . "!<br />"else echo "Welcome guest!<br />"?></body></html>如何刪除 cookie?當刪除 cookie 時,您應當使過期日期變更為過去的時間點。<?php / set the expiration date to one hour agosetcookie("user", ""
5、, time()-3600);?>如果瀏覽器不支持 cookie 該怎么辦?如果您的應用程序涉及不支持 cookie 的瀏覽器,您就不得不采取其他方法在應用程序中從一張頁面向另一張頁面?zhèn)鬟f信息。一種方式是從表單傳遞數據(有關表單和用戶輸入的內容,稍早前我們已經在本教程中介紹過了)。下面的表單在用戶單擊提交按鈕時向 “welcome.php” 提交了用戶輸入:<html><body><form action="welcome.php" method="post">Name: <input type="
6、;text" name="name" />Age: <input type="text" name="age" /><input type="submit" /></form></body></html>取回 “welcome.php” 中的值,就像這樣:<html><body>Welcome <?php echo $_POST"name" ?>.<br />You are
7、 <?php echo $_POST"age" ?> years old.</body></html>PHP SessionsPHP session 變量用于存儲有關用戶會話的信息,或更改用戶會話的設置。Session 變量保存的信息是單一用戶的,并且可供應用程序中的所有頁面使用。PHP Session 變量當您運行一個應用程序時,您會打開它,做些更改,然后關閉它。這很像一次會話。計算機清楚你是誰。它知道你何時啟動應用程序,并在何時終止。但是在因特網上,存在一個問題:服務器不知道你是誰以及你做什么,這是由于 HTTP 地址不能維持狀態(tài)。通
8、過在服務器上存儲用戶信息以便隨后使用,PHP session 解決了這個問題(比如用戶名稱、購買商品等)。不過,會話信息是臨時的,在用戶離開網站后將被刪除。如果您需要永久儲存信息,可以把數據存儲在數據庫中。Session 的工作機制是:為每個訪問者創(chuàng)建一個唯一的 id (UID),并基于這個 UID 來存儲變量。UID 存儲在 cookie 中,亦或通過 URL 進行傳導。開始 PHP Session在您把用戶信息存儲到 PHP session 中之前,首先必須啟動會話。注釋:session_start() 函數必須位于 <html> 標簽之前:<?php session_s
9、tart(); ?><html><body></body></html>上面的代碼會向服務器注冊用戶的會話,以便您可以開始保存用戶信息,同時會為用戶會話分配一個 UID。存儲 Session 變量存儲和取回 session 變量的正確方法是使用 PHP $_SESSION 變量:<?phpsession_start();/ store session data$_SESSION'views'=1;?><html><body><?php/retrieve session dataech
10、o "Pageviews=". $_SESSION'views'?></body></html>輸出:Pageviews=11在下面的例子中,我們創(chuàng)建了一個簡單的 page-view 計數器。isset() 函數檢測是否已設置 “views” 變量。如果已設置 “views” 變量,我們累加計數器。如果 “views” 不存在,則我們創(chuàng)建 “views” 變量,并把它設置為 1:<?phpsession_start();if(isset($_SESSION'views') $_SESSION'vie
11、ws'=$_SESSION'views'+1;else $_SESSION'views'=1;echo "Views=". $_SESSION'views'?>終結 Session如果您希望刪除某些 session 數據,可以使用 unset() 或 session_destroy() 函數。 unset() 函數用于釋放指定的 session 變量:<?phpunset($_SESSION'views');?>您也可以通過 session_destroy() 函數徹底終結 sessi
12、on:<?phpsession_destroy();?>注釋:session_destroy() 將重置 session,您將失去所有已存儲的 session 數據。PHP 發(fā)送電子郵件PHP 允許您從腳本直接發(fā)送電子郵件。PHP mail() 函數PHP mail() 函數用于從腳本中發(fā)送電子郵件。語法mail(to,subject,message,headers,parameters)注釋:PHP 需要一個已安裝且正在運行的郵件系統(tǒng),以便使郵件函數可用。所用的程序通過在 php.ini 文件中的配置設置進行定義。請在我們的 PHP Mail 參考手冊閱讀更多內容。PHP 簡易
13、E-Mail通過 PHP 發(fā)送電子郵件的最簡單的方式是發(fā)送一封文本 email。 在下面的例子中,我們首先聲明變量($to, $subject, $message, $from, $headers),然后我們在 mail() 函數中使用這些變量來發(fā)送了一封 e-mail:<?php$to = "someone"$subject = "Test mail"$message = "Hello! This is a simple email message."$from = "someonelse"$headers
14、 = "From: $from"mail($to,$subject,$message,$headers);echo "Mail Sent."?>PHP Mail Form通過 PHP,您能夠在自己的站點制作一個反饋表單。下面的例子向指定的 e-mail 地址發(fā)送了一條文本消息:<html><body><?phpif (isset($_REQUEST'email')/if "email" is filled out, send email /send email $email = $_
15、REQUEST'email' ; $subject = $_REQUEST'subject' ; $message = $_REQUEST'message' ; mail( "someone", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form" else/if "email" is not filled out, dis
16、play the form echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message
17、9; rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>" ?></body></html>例子解釋: 首先,檢查是否填寫了郵件輸入框 如果未填寫(比如在頁面被首次訪問時),輸出 HTML 表單 如果已填寫(在表單被填寫后),從表單發(fā)送郵件 當點擊提交按鈕后,重新載入頁面,顯示郵件發(fā)送成功的消息PHP 安全的電子郵件在上一節(jié)中的 PHP e-mail 腳本中,存在著
18、一個漏洞。PHP E-mail 注入首先,請看上一節(jié)中的 PHP 代碼:<html><body><?phpif (isset($_REQUEST'email')/if "email" is filled out, send email /send email $email = $_REQUEST'email' ; $subject = $_REQUEST'subject' ; $message = $_REQUEST'message' ; mail("someone&qu
19、ot;, "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form" else/if "email" is not filled out, display the form echo "<form method='post' action='mailform.php'> Email: <input name='email'
20、 type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>&qu
21、ot; ?></body></html>以上代碼存在的問題是,未經授權的用戶可通過輸入表單在郵件頭部插入數據。 假如用戶在表單中的輸入框內加入這些文本,會出現什么情況呢?omeone%0ACc:person2%0ABcc:person3,person3,anotherperson4,person5%0ABTo:person6與往常一樣,mail() 函數把上面的文本放入郵件頭部,那么現在頭部有了額外的 Cc:, Bcc: 以及 To: 字段。當用戶點擊提交按鈕時,這封 e-mail 會被發(fā)送到上面所有的地址!PHP 防止 E-mail 注入防止 e-mail 注入
22、的最好方法是對輸入進行驗證。 下面的代碼與上一節(jié)類似,不過我們已經增加了檢測表單中 email 字段的輸入驗證程序:<html><body><?phpfunction spamcheck($field) /filter_var() sanitizes the e-mail /address using FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); /filter_var() validates the e-mail /address using FILTER_VALI
23、DATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL) return TRUE; else return FALSE; if (isset($_REQUEST'email') /if "email" is filled out, proceed /check if the email address is invalid $mailcheck = spamcheck($_REQUEST'email'); if ($mailcheck=FALSE) echo "Invalid i
24、nput" else /send email $email = $_REQUEST'email' ; $subject = $_REQUEST'subject' ; $message = $_REQUEST'message' ; mail("someone", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form" else /if &
25、quot;email" is not filled out, display the form echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br
26、/> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>" ?></body></html>在上面的代碼中,我們使用了 PHP 過濾器來對輸入進行驗證:FILTER_SANITIZE_EMAIL 從字符串中刪除電子郵件的非法字符FILTER_VALIDATE_EMAIL 驗證電子郵件地址P
27、HP 錯誤處理在 PHP 中,默認的錯誤處理很簡單。一條消息會被發(fā)送到瀏覽器,這條消息帶有文件名、行號以及一條描述錯誤的消息。PHP 錯誤處理在創(chuàng)建腳本和 web 應用程序時,錯誤處理是一個重要的部分。如果您的代碼缺少錯誤檢測編碼,那么程序看上去很不專業(yè),也為安全風險敞開了大門。本教程介紹了 PHP 中一些最為重要的錯誤檢測方法。我們將為您講解不同的錯誤處理方法:簡單的 “die()” 語句自定義錯誤和錯誤觸發(fā)器錯誤報告基本的錯誤處理:使用 die() 函數第一個例子展示了一個打開文本文件的簡單腳本:<?php$file=fopen("welcome.txt",&qu
28、ot;r");?>如果文件不存在,您會獲得類似這樣的錯誤:Warning: fopen(welcome.txt) function.fopen: failed to open stream: No such file or directory in C:webfoldertest.php on line 2為了避免用戶獲得類似上面的錯誤消息,我們在訪問文件之前檢測該文件是否存在:<?phpif(!file_exists("welcome.txt") die("File not found"); else $file=fopen(&q
29、uot;welcome.txt","r"); ?>現在,假如文件不存在,您會得到類似這樣的錯誤消息:File not found比起之前的代碼,上面的代碼更有效,這是由于它采用了一個簡單的錯誤處理機制在錯誤之后終止了腳本。 不過,簡單地終止腳本并不總是恰當的方式。讓我們研究一下用于處理錯誤的備選的 PHP 函數。創(chuàng)建自定義錯誤處理器創(chuàng)建一個自定義的錯誤處理器非常簡單。我們很簡單地創(chuàng)建了一個專用函數,可以在 PHP 中發(fā)生錯誤時調用該函數。該函數必須有能力處理至少兩個參數 (error level 和 error message),但是可以接受最多五個參數(可
30、選的:file, line-number 以及 error context):語法error_function(error_level,error_message,error_file,error_line,error_context)現在,讓我們創(chuàng)建一個處理錯誤的函數:function customError($errno, $errstr) echo "<b>Error:</b> $errno $errstr<br />" echo "Ending Script" die(); 上面的代碼是一個簡單的錯誤處理函數。
31、當它被觸發(fā)時,它會取得錯誤級別和錯誤消息。然后它會輸出錯誤級別和消息,并終止腳本。現在,我們已經創(chuàng)建了一個錯誤處理函數,我們需要確定在何時觸發(fā)該函數。Set Error HandlerPHP 的默認錯誤處理程序是內建的錯誤處理程序。我們打算把上面的函數改造為腳本運行期間的默認錯誤處理程序??梢孕薷腻e誤處理程序,使其僅應用到某些錯誤,這樣腳本就可以不同的方式來處理不同的錯誤。不過,在本例中,我們打算針對所有錯誤來使用我們的自定義錯誤處理程序:set_error_handler("customError");1由于我們希望我們的自定義函數來處理所有錯誤,set_error_ha
32、ndler() 僅需要一個參數,可以添加第二個參數來規(guī)定錯誤級別。實例通過嘗試輸出不存在的變量,來測試這個錯誤處理程序:<?php/error handler functionfunction customError($errno, $errstr) echo "<b>Error:</b> $errno $errstr" /set error handlerset_error_handler("customError");/trigger errorecho($test);?>以上代碼的輸出應該類似這樣:Error:
33、8 Undefined variable: test1觸發(fā)錯誤在腳本中用戶輸入數據的位置,當用戶的輸入無效時觸發(fā)錯誤的很有用的。在 PHP 中,這個任務由 trigger_error() 完成。例子在本例中,如果 “test” 變量大于 “1”,就會發(fā)生錯誤:<?php$test=2;if ($test>1)trigger_error("Value must be 1 or below");?>以上代碼的輸出應該類似這樣:Notice: Value must be 1 or belowin C:webfoldertest.php on line 612您可
34、以在腳本中任何位置觸發(fā)錯誤,通過添加的第二個參數,您能夠規(guī)定所觸發(fā)的錯誤級別??赡艿腻e誤類型:E_USER_ERROR - 致命的用戶生成的 run-time 錯誤。錯誤無法恢復。腳本執(zhí)行被中斷。E_USER_WARNING - 非致命的用戶生成的 run-time 警告。腳本執(zhí)行不被中斷。E_USER_NOTICE - 默認。用戶生成的 run-time 通知。腳本發(fā)現了可能的錯誤,也有可能在腳本運行正常時發(fā)生。例子在本例中,如果 “test” 變量大于 “1”,則發(fā)生 E_USER_WARNING 錯誤。如果發(fā)生了 E_USER_WARNING,我們將使用我們的自定義錯誤處理程序并結束腳本
35、:<?php/error handler functionfunction customError($errno, $errstr) echo "<b>Error:</b> $errno $errstr<br />" echo "Ending Script" die(); /set error handlerset_error_handler("customError",E_USER_WARNING);/trigger error$test=2;if ($test>1) trigger_
36、error("Value must be 1 or below",E_USER_WARNING); ?>以上代碼的輸出應該類似這樣:Error: 512 Value must be 1 or belowEnding Script12現在,我們已經學習了如何創(chuàng)建自己的 error,以及如何觸發(fā)它們,現在我們研究一下錯誤記錄。錯誤記錄默認地,根據在 php.ini 中的 error_log 配置,PHP 向服務器的錯誤記錄系統(tǒng)或文件發(fā)送錯誤記錄。通過使用 error_log() 函數,您可以向指定的文件或遠程目的地發(fā)送錯誤記錄。 通過電子郵件向您自己發(fā)送錯誤消息,是一種獲
37、得指定錯誤的通知的好辦法。通過 E-Mail 發(fā)送錯誤消息在下面的例子中,如果特定的錯誤發(fā)生,我們將發(fā)送帶有錯誤消息的電子郵件,并結束腳本:<?php/error handler functionfunction customError($errno, $errstr) echo "<b>Error:</b> $errno $errstr<br />" echo "Webmaster has been otified" error_log("Error: $errno $errstr",1,
38、"someone","From: webmaster");/set error handlerset_error_handler("customError",E_USER_WARNING);/trigger error$test=2;if ($test>1) trigger_error("Value must be 1 or below",E_USER_WARNING); ?>以上代碼的輸出應該類似這樣:Error: 512 Value must be 1 or belowWebmaster has b
39、een notified接收自以上代碼的郵件類似這樣:Error: 512 Value must be 1 or below這個方法不適合所有的錯誤。常規(guī)錯誤應當通過使用默認的 PHP 記錄系統(tǒng)在服務器上進行記錄。PHP 異常處理異常(Exception)用于在指定的錯誤發(fā)生時改變腳本的正常流程。什么是異常?PHP 5 提供了一種新的面向對象的錯誤處理方法。 異常處理用于在指定的錯誤(異常)情況發(fā)生時改變腳本的正常流程。這種情況稱為異常。當異常被觸發(fā)時,通常會發(fā)生:當前代碼狀態(tài)被保存代碼執(zhí)行被切換到預定義的異常處理器函數根據情況,處理器也許會從保存的代碼狀態(tài)重新開始執(zhí)行代碼,終止腳本執(zhí)行,或從
40、代碼中另外的位置繼續(xù)執(zhí)行腳本我們將展示不同的錯誤處理方法:異常的基本使用創(chuàng)建自定義的異常處理器多個異常重新拋出異常設置頂層異常處理器異常的基本使用當異常被拋出時,其后的代碼不會繼續(xù)執(zhí)行,PHP 會嘗試查找匹配的 “catch” 代碼塊。如果異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應的處理的話,那么將發(fā)生一個嚴重的錯誤(致命錯誤),并且輸出 “Uncaught Exception” (未捕獲異常)的錯誤消息。 讓我們嘗試拋出一個異常,同時不去捕獲它:<?php/create function with an exceptionfunction c
41、heckNum($number) if($number>1) throw new Exception("Value must be 1 or below"); return true; /trigger exceptioncheckNum(2);?>上面的代碼會獲得類似這樣的一個錯誤:Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in C:webfoldertest.php:6 Stack trace: #0
42、C:webfoldertest.php(12): checkNum(28) #1 main thrown in C:webfoldertest.php on line 6Try, throw 和 catch要避免上面例子出現的錯誤,我們需要創(chuàng)建適當的代碼來處理異常。 正確的處理程序應當包括:Try - 使用異常的函數應該位于 “try” 代碼塊內。如果沒有觸發(fā)異常,則代碼將照常繼續(xù)執(zhí)行。但是如果異常被觸發(fā),會拋出一個異常。Throw - 這里規(guī)定如何觸發(fā)異常。每一個 “throw” 必須對應至少一個 “catch”Catch - “catch” 代碼塊會捕獲異常,并創(chuàng)建一個包含異常信息的對象讓
43、我們觸發(fā)一個異常:<?php/創(chuàng)建可拋出一個異常的函數function checkNum($number) if($number>1) throw new Exception("Value must be 1 or below"); return true; /在 "try" 代碼塊中觸發(fā)異常try checkNum(2); /If the exception is thrown, this text will not be shown echo 'If you see this, the number is 1 or below
44、39; /捕獲異常catch(Exception $e) echo 'Message: ' .$e->getMessage(); ?>上面代碼將獲得類似這樣一個錯誤:Message: Value must be 1 or below 1例子解釋: 上面的代碼拋出了一個異常,并捕獲了它:創(chuàng)建 checkNum() 函數。它檢測數字是否大于 1。如果是,則拋出一個異常。在 “try” 代碼塊中調用 checkNum() 函數。checkNum() 函數中的異常被拋出“catch” 代碼塊接收到該異常,并創(chuàng)建一個包含異常信息的對象 ($e)。通過從這個 exception
45、 對象調用 $e->getMessage(),輸出來自該異常的錯誤消息不過,為了遵循“每個 throw 必須對應一個 catch”的原則,可以設置一個頂層的異常處理器來處理漏掉的錯誤。創(chuàng)建一個自定義的 Exception 類創(chuàng)建自定義的異常處理程序非常簡單。我們簡單地創(chuàng)建了一個專門的類,當 PHP 中發(fā)生異常時,可調用其函數。該類必須是 exception 類的一個擴展。 這個自定義的 exception 類繼承了 PHP 的 exception 類的所有屬性,您可向其添加自定義的函數。 我們開始創(chuàng)建 exception 類:<?phpclass customException e
46、xtends Exception public function errorMessage() /error message $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address' return $errorMsg; $email = "someone"tr
47、y /check if if(filter_var($email, FILTER_VALIDATE_EMAIL) = FALSE) /throw exception if email is not valid throw new customException($email); catch (customException $e) /display custom message echo $e->errorMessage(); ?>這個新的類是舊的 exception 類的副本,外加 errorMessage() 函數。正因為它是舊類的副本,因此它從舊類繼承了屬性和方法,我們可以使
48、用 exception 類的方法,比如 getLine() 、 getFile() 以及 getMessage()。例子解釋: 上面的代碼拋出了一個異常,并通過一個自定義的 exception 類來捕獲它:customException() 類是作為舊的 exception 類的一個擴展來創(chuàng)建的。這樣它就繼承了舊類的所有屬性和方法。創(chuàng)建 errorMessage() 函數。如果 e-mail 地址不合法,則該函數返回一條錯誤消息把 $email 變量設置為不合法的 e-mail 地址字符串執(zhí)行 “try” 代碼塊,由于 e-mail 地址不合法,因此拋出一個異?!癱atch” 代碼塊捕獲異常,
49、并顯示錯誤消息多個異??梢詾橐欢文_本使用多個異常,來檢測多種情況。 可以使用多個 if.else 代碼塊,或一個 switch 代碼塊,或者嵌套多個異常。這些異常能夠使用不同的 exception 類,并返回不同的錯誤消息:<?phpclass customException extends Exceptionpublic function errorMessage()/error message$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile().'
50、: <b>'.$this->getMessage().'</b> is not a valid E-Mail address'return $errorMsg;$email = "someone"try /check if if(filter_var($email, FILTER_VALIDATE_EMAIL) = FALSE) /throw exception if email is not valid throw new customException($email); /check for "exampl
51、e" in mail address if(strpos($email, "example") != FALSE) throw new Exception("$email is an example e-mail"); catch (customException $e) echo $e->errorMessage(); catch(Exception $e) echo $e->getMessage(); ?>例子解釋: 上面的代碼測試了兩種條件,如何任何條件不成立,則拋出一個異常:customException() 類是作為
52、舊的 exception 類的一個擴展來創(chuàng)建的。這樣它就繼承了舊類的所有屬性和方法。創(chuàng)建 errorMessage() 函數。如果 e-mail 地址不合法,則該函數返回一個錯誤消息。執(zhí)行 “try” 代碼塊,在第一個條件下,不會拋出異常。由于 e-mail 含有字符串 “example”,第二個條件會觸發(fā)異常。“catch” 代碼塊會捕獲異常,并顯示恰當的錯誤消息如果沒有捕獲 customException,緊緊捕獲了 base exception,則在那里處理異常。重新拋出異常有時,當異常被拋出時,您也許希望以不同于標準的方式對它進行處理??梢栽谝粋€ “catch” 代碼塊中再次拋出異常。
53、 腳本應該對用戶隱藏系統(tǒng)錯誤。對程序員來說,系統(tǒng)錯誤也許很重要,但是用戶對它們并不感興趣。為了讓用戶更容易使用,您可以再次拋出帶有對用戶比較友好的消息的異常:<?phpclass customException extends Exception public function errorMessage() /error message $errorMsg = $this->getMessage().' is not a valid E-Mail address.' return $errorMsg; $email = "someone"try
54、try /check for "example" in mail address if(strpos($email, "example") != FALSE) /throw exception if email is not valid throw new Exception($email); catch(Exception $e) /re-throw exception throw new customException($email); catch (customException $e) /display custom message echo $
55、e->errorMessage(); ?>例子解釋: 上面的代碼檢測在郵件地址中是否含有字符串 “example”。如果有,則再次拋出異常:customException() 類是作為舊的 exception 類的一個擴展來創(chuàng)建的。這樣它就繼承了舊類的所有屬性和方法。創(chuàng)建 errorMessage() 函數。如果 e-mail 地址不合法,則該函數返回一個錯誤消息。把 $email 變量設置為一個有效的郵件地址,但含有字符串 “example”?!皌ry” 代碼塊包含另一個 “try” 代碼塊,這樣就可以再次拋出異常。由于 e-mail 包含字符串 “example”,因此觸發(fā)異常
56、。“catch” 捕獲到該異常,并重新拋出 “customException”。捕獲到 “customException”,并顯示一條錯誤消息。如果在其目前的 “try” 代碼塊中異常沒有被捕獲,則它將在更高層級上查找 catch 代碼塊。、設置頂層異常處理器 (Top Level Exception Handler)set_exception_handler() 函數可設置處理所有未捕獲異常的用戶定義函數。<?phpfunction myException($exception)echo "<b>Exception:</b> " , $exc
57、eption->getMessage();set_exception_handler('myException');throw new Exception('Uncaught Exception occurred');?>以上代碼的輸出應該類似這樣:Exception: Uncaught Exception occurred1在上面的代碼中,不存在 “catch” 代碼塊,而是觸發(fā)頂層的異常處理程序。應該使用此函數來捕獲所有未被捕獲的異常。異常的規(guī)則需要進行異常處理的代碼應該放入 try 代碼塊內,以便捕獲潛在的異常。每個 try 或 throw 代
58、碼塊必須至少擁有一個對應的 catch 代碼塊。使用多個 catch 代碼塊可以捕獲不同種類的異常。可以在 try 代碼塊內的 catch 代碼塊中再次拋出(re-thrown)異常。簡而言之:如果拋出了異常,就必須捕獲它。PHP 過濾器(Filter)PHP 過濾器用于驗證和過濾來自非安全來源的數據,比如用戶的輸入。什么是 PHP 過濾器?PHP 過濾器用于驗證和過濾來自非安全來源的數據。 驗證和過濾用戶輸入或自定義數據是任何 Web 應用程序的重要組成部分。 設計 PHP 的過濾器擴展的目的是使數據過濾更輕松快捷。為什么使用過濾器?幾乎所有 web 應用程序都依賴外部的輸入。這些數據通常來自用戶或其他應用程序(比如 web 服務)。通過使用過濾器,您能夠確保應有程序獲得正確的輸入類型。 您應該始終對外部數據進行過濾!輸入過濾是最重要的應用程序安全課題之一。什么是外部數據?來自表單的輸入數據Cookies服務器變量數據庫查詢結果函數和過濾器如需過濾變量,請使用下面的過濾器函數之一:filter_var() - 通過一個指定的過濾器來過濾單一的變量filter_var_a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黃岡科技職業(yè)學院《互聯網經濟學》2023-2024學年第二學期期末試卷
- 河南物流職業(yè)學院《員工招募與甄選》2023-2024學年第二學期期末試卷
- 哈爾濱石油學院《中國重大考古發(fā)現》2023-2024學年第二學期期末試卷
- 企業(yè)綠色認證體系-洞察及研究
- 大連商務職業(yè)學院《Matab原理與應用》2023-2024學年第二學期期末試卷
- 遼寧鐵道職業(yè)技術學院《綜合繪畫材料表現》2023-2024學年第二學期期末試卷
- 中國計量大學《物流流程再造》2023-2024學年第二學期期末試卷
- 哈爾濱科學技術職業(yè)學院《藥學拉丁語》2023-2024學年第二學期期末試卷
- 重慶醫(yī)藥高等??茖W校《聲樂2》2023-2024學年第二學期期末試卷
- 冰川泥石流沉積特征-洞察及研究
- 遼寧沈陽副食集團所屬企業(yè)招聘筆試題庫2025
- 2024-2025湘美版六年級下冊美術期末考試卷及答案
- AI助力市場營銷自動化及優(yōu)化策略研究
- 2025年湖北省中考生物模擬試題七
- 主扇風機操作員培訓課件
- 2025年福建省龍巖市中考數學模擬卷(含答案)
- 高考英語讀后續(xù)寫:三大主題語境結尾金句
- 微信授權協(xié)議書范本
- 中國糖尿病足診治指南(2024版)解讀課件
- 場地合作分成協(xié)議合同
- 2025年中國高吸水性樹脂行業(yè)市場發(fā)展現狀研究及投資戰(zhàn)略咨詢報告
評論
0/150
提交評論