PHP高級(jí)教程
努力向上的開(kāi)拓,才使彎曲的竹鞭化作了筆直的毛竹。以下是小編為大家搜索整理了PHP高級(jí)教程,希望能給大家?guī)?lái)幫助!更多精彩內(nèi)容請(qǐng)及時(shí)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
PHP 高級(jí)教程 PHP Date()PHP 的 date() 函數(shù)用于格式化時(shí)間或日期。 函數(shù)用于格式化時(shí)間或日期。PHP Date() 函數(shù)PHP Date() 函數(shù)可把時(shí)間戳格式化為可讀性更好的日期和時(shí)間。語(yǔ)法date(format,timestamp) 參數(shù) format timestamp 描述 必需。規(guī)定時(shí)間戳的格式。 可選。規(guī)定時(shí)間戳。默認(rèn)是當(dāng)前的日期和時(shí)間。PHP 日期 - 什么是時(shí)間戳(Timestamp)? 什么是時(shí)間戳( )?時(shí)間戳是自 1970 年 1 月 1 日(00:00:00 GMT)以來(lái)的秒數(shù)。它也被稱(chēng)為 Unix 時(shí)間戳(Unix Timestam) 。PHP 日期 - 格式化日期date() 函數(shù)的第一個(gè)參數(shù)規(guī)定了如何格式化日期/時(shí)間。它使用字母來(lái)表示日期和時(shí)間的格式。這里列出 了一些可用的字母: ? ? ? d - 月中的天 (01-31) m - 當(dāng)前月,以數(shù)字計(jì) (01-12) Y - 當(dāng)前的年(四位數(shù))您可以在我們的 PHP Date 參考手冊(cè)中,找到格式參數(shù)中可以使用的所有字母?梢栽谧帜钢g插入其他字符,比如 "/"、"." 或者 "-",這樣就可以增加附加格式了:
echo date("Y-m-d"); ?>以上代碼的輸出類(lèi)似這樣:2006/07/11 2006.07.11 2006-07-11PHP 日期 - 添加時(shí)間戳date() 函數(shù)的第二個(gè)參數(shù)規(guī)定了一個(gè)時(shí)間戳。此參數(shù)是可選的。如果您沒(méi)有提供時(shí)間戳,當(dāng)前的時(shí)間將被 使用。在我們的例子中,我們將使用 mktime() 函數(shù)為明天創(chuàng)建一個(gè)時(shí)間戳。mktime() 函數(shù)可為指定的日期返回 Unix 時(shí)間戳。語(yǔ)法mktime(hour,minute,second,month,day,year,is_dst)如需獲得某一天的時(shí)間戳,我們只要設(shè)置 mktime() 函數(shù)的 day 參數(shù)就可以了:以上代碼的輸出類(lèi)似這樣:明天是 2006/07/12PHP 引用文件用于創(chuàng)建可在多個(gè)頁(yè)面重復(fù)使用的函數(shù)、頁(yè)眉、頁(yè)腳或元素。 服務(wù)器端引用 (SSI) 用于創(chuàng)建可在多個(gè)頁(yè)面重復(fù)使用的函數(shù)、頁(yè)眉、頁(yè)腳或元素。
服務(wù)器端引用( 服務(wù)器端引用(Server Side Includes) )通過(guò) include() 或 require() 函數(shù),您可以在服務(wù)器執(zhí)行 PHP 文件之前在該文件中插入一個(gè)文件的內(nèi) 容。除了它們處理錯(cuò)誤的方式不同之外,這兩個(gè)函數(shù)在其他方面都是相同的。include() 函數(shù)會(huì)生成一個(gè) 警告(但是腳本會(huì)繼續(xù)執(zhí)行) ,而 require() 函數(shù)會(huì)生成一個(gè)致命錯(cuò)誤(fatal error) (在錯(cuò)誤發(fā)生后腳本 會(huì)停止執(zhí)行) 。這兩個(gè)函數(shù)用于創(chuàng)建可在多個(gè)頁(yè)面重復(fù)使用的函數(shù)、頁(yè)眉、頁(yè)腳或元素。這會(huì)為開(kāi)發(fā)者節(jié)省大量的時(shí)間。這意味著您可以創(chuàng)建供所有網(wǎng)頁(yè)引用的標(biāo)準(zhǔn)頁(yè)眉或菜單文件。當(dāng)頁(yè)眉需要 更新時(shí),您只更新一個(gè)包含文件就可以了,或者當(dāng)您向網(wǎng)站添加一張新頁(yè)面時(shí),僅僅需要修改一下菜單文 件(而不是更新所有網(wǎng)頁(yè)中的鏈接) 。include() 函數(shù)include() 函數(shù)可獲得指定文件中的所有文本,并把文本拷貝到使用 include 函數(shù)的文件中。例子 1 假設(shè)您擁有一個(gè)標(biāo)準(zhǔn)的頁(yè)眉文件, 名為 "header.php"。 如需在頁(yè)面中引用這個(gè)頁(yè)眉文件, 請(qǐng)使用 include() 函數(shù),就像這樣:
Welcome to my home page
Some text
例子 2 現(xiàn)在,假設(shè)我們有一個(gè)在所有頁(yè)面上使用的標(biāo)準(zhǔn)菜單文件。請(qǐng)看下面這個(gè) "menu.php":
Home | About Us | Contact Us三個(gè)文件,"default.php"、"about.php" 以及 "contact.php" 都引用了 "menu.php" 文件。這是 "default.php" 中的代碼:
Welcome to my home page
Some text
如果您在瀏覽器中查看 "default.php" 的源代碼,應(yīng)該類(lèi)似這樣: Home | About Us | Contact Us
Welcome to my home page
Some text
同時(shí),當(dāng)然,我們也將用相同的方法處理 "about.php" 和 "contact.php"。通過(guò)使用引用文件,在您需 要重命名鏈接、更改鏈接順序或向站點(diǎn)添加另一張網(wǎng)頁(yè)時(shí),只要簡(jiǎn)單地更新 "menu.php" 文件中的文本 即可。require() 函數(shù)require() 函數(shù)與 include() 相同,不同的是它對(duì)錯(cuò)誤的處理方式。include() 函數(shù)會(huì)生成一個(gè)警告(但是腳本會(huì)繼續(xù)執(zhí)行) ,而 require() 函數(shù)會(huì)生成一個(gè)致命錯(cuò)誤(fatal error) (在錯(cuò)誤發(fā)生后腳本會(huì)停止執(zhí)行) 。如果在您通過(guò) include() 引用文件時(shí)發(fā)生了錯(cuò)誤,會(huì)得到類(lèi)似下面這樣的錯(cuò)誤消息:PHP 代碼: 代碼: 錯(cuò)誤消息: 錯(cuò)誤消息:Warning: include(wrongFile.php) [function.include]: failed to open stream: No such file or directory in C:\home\website\test.php on line 5Warning: include() [function.include]: Failed opening 'wrongFile.php' for inclusion
(include_path='.;C:\php5\pear') in C:\home\website\test.php on line 5Hello World!請(qǐng)注意,echo 語(yǔ)句依然被執(zhí)行了!這是因?yàn)榫娌粫?huì)中止腳本的執(zhí)行,F(xiàn)在,讓我們使用 require() 函數(shù)運(yùn)行相同的例子。PHP 代碼: 代碼: 錯(cuò)誤消息: 錯(cuò)誤消息:Warning: require(wrongFile.php) [function.require]: failed to open stream: No such file or directory in C:\home\website\test.php on line 5Fatal error: require() [function.require]: Failed opening required 'wrongFile.php' (include_path='.;C:\php5\pear') in C:\home\website\test.php on line 5
由于在致命錯(cuò)誤發(fā)生后終止了腳本的執(zhí)行,因此 echo 語(yǔ)句不會(huì)執(zhí)行。正因?yàn)樵谖募淮嬖诨虮恢孛竽_本不會(huì)繼續(xù)執(zhí)行, 正因?yàn)樵谖募淮嬖诨虮恢孛竽_本不會(huì)繼續(xù)執(zhí)行,因此我們推薦使用 require() 而不是 include()。 。PHP 文件處理fopen() 函數(shù)用于在 PHP 中打開(kāi)文件。 中打開(kāi)文件。打開(kāi)文件fopen() 函數(shù)用于在 PHP 中打開(kāi)文件。此函數(shù)的第一個(gè)參數(shù)含有要打開(kāi)的文件的名稱(chēng),第二個(gè)參數(shù)規(guī)定了使用哪種模式來(lái)打開(kāi)文件: 文件可能通過(guò)下列模式來(lái)打開(kāi): 模式 r r+ w w+ a 只讀。在文件的開(kāi)頭開(kāi)始。 讀/寫(xiě)。在文件的開(kāi)頭開(kāi)始。 只寫(xiě)。打開(kāi)并清空文件的內(nèi)容;如果文件不存在,則創(chuàng)建新文件。 讀/寫(xiě)。打開(kāi)并清空文件的內(nèi)容;如果文件不存在,則創(chuàng)建新文件。 追加。打開(kāi)并向文件文件的末端進(jìn)行寫(xiě)操作,如果文件不存在, 則創(chuàng)建新文件。 a+ x 讀/追加。通過(guò)向文件末端寫(xiě)內(nèi)容,來(lái)保持文件內(nèi)容。 只寫(xiě)。創(chuàng)建新文件。如果文件以存在,則返回 FALSE。 描述
x+讀/寫(xiě)。創(chuàng)建新文件。如果文件已存在,則返回 FALSE 和一個(gè)錯(cuò) 誤。 注釋?zhuān)喝绻?fopen() 無(wú)法打開(kāi)指定文件,則返回 0 (false)。例子 如果 fopen() 不能打開(kāi)指定的文件,下面的例子會(huì)生成一段消息: 關(guān)閉文件fclose() 函數(shù)用于關(guān)閉打開(kāi)的文件。檢測(cè) End-of-filefeof() 函數(shù)檢測(cè)是否已達(dá)到文件的末端 (EOF)。在循環(huán)遍歷未知長(zhǎng)度的數(shù)據(jù)時(shí),feof() 函數(shù)很有用。
注釋?zhuān)?注釋?zhuān)涸?w 、a 以及 x 模式,您無(wú)法讀取打開(kāi)的文件!if (feof($file)) echo "End of file";逐行讀取文件fgets() 函數(shù)用于從文件中逐行讀取文件。注釋?zhuān)?注釋?zhuān)涸谡{(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一行。例子 下面的例子逐行讀取文件,直到文件末端為止:逐字符讀取文件fgetc() 函數(shù)用于從文件逐字符地讀取文件。注釋?zhuān)?注釋?zhuān)涸谡{(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一個(gè)字符。例子 下面的例子逐字符地讀取文件,直到文件末端為止:
} fclose($file); ?>PHP 文件上傳通過(guò) PHP,可以把文件上傳到服務(wù)器。 ,可以把文件上傳到服務(wù)器。創(chuàng)建一個(gè)文件上傳表單允許用戶(hù)從表單上傳文件是非常有用的。請(qǐng)看下面這個(gè)供上傳文件的 HTML 表單:
Filename:
請(qǐng)留意如下有關(guān)此表單的信息:
標(biāo)簽的 enctype 屬性規(guī)定了在提交表單時(shí)要使用哪種內(nèi)容類(lèi)型。在表單需要二進(jìn)制數(shù)據(jù)時(shí),比 如文件內(nèi)容,請(qǐng)使用 "multipart/form-data"。 標(biāo)簽的 type="file" 屬性規(guī)定了應(yīng)該把輸入作為文件來(lái)處理。 舉例來(lái)說(shuō), 當(dāng)在瀏覽器中預(yù)覽時(shí), 會(huì)看到輸入框旁邊有一個(gè)瀏覽按鈕。
注釋?zhuān)?注釋?zhuān)涸试S用戶(hù)上傳文件是一個(gè)巨大的安全風(fēng)險(xiǎn)。請(qǐng)僅僅允許可信的用戶(hù)執(zhí)行文件上傳操作。創(chuàng)建上傳腳本"upload_file.php" 文件含有供上傳文件的代碼: 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"]; } ?>通過(guò)使用 PHP 的全局?jǐn)?shù)組 $_FILES,你可以從客戶(hù)計(jì)算機(jī)向遠(yuǎn)程服務(wù)器上傳文件。第一個(gè)參數(shù)是表單的 input name,第二個(gè)下標(biāo)可以是 "name", "type", "size", "tmp_name" 或 "error"。就像這樣: ? ? ? ? ? $_FILES["file"]["name"] - 被上傳文件的名稱(chēng) $_FILES["file"]["type"] - 被上傳文件的類(lèi)型 $_FILES["file"]["size"] - 被上傳文件的大小,以字節(jié)計(jì) $_FILES["file"]["tmp_name"] - 存儲(chǔ)在服務(wù)器的文件的臨時(shí)副本的名稱(chēng) $_FILES["file"]["error"] - 由文件上傳導(dǎo)致的錯(cuò)誤代碼這是一種非常簡(jiǎn)單文件上傳方式。基于安全方面的考慮,您應(yīng)當(dāng)增加有關(guān)什么用戶(hù)有權(quán)上傳文件的限制。上傳限制在這個(gè)腳本中, 我們?cè)黾恿藢?duì)文件上傳的限制。 用戶(hù)只能上傳 .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"; }?>注釋?zhuān)?注釋?zhuān)簩?duì)于 IE,識(shí)別 jpg 文件的類(lèi)型必須是 pjpeg,對(duì)于 FireFox,必須是 jpeg。保存被上傳的文件上面的例子在服務(wù)器的 PHP 臨時(shí)文件夾創(chuàng)建了一個(gè)被上傳文件的臨時(shí)副本。這個(gè)臨時(shí)的復(fù)制文件會(huì)在腳本結(jié)束時(shí)消失。要保存被上傳的文件,我們需要把它拷貝到另外的位置:
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"; } ?>上面的腳本檢測(cè)了是否已存在此文件,如果不存在,則把文件拷貝到指定的文件夾。注釋?zhuān)?注釋?zhuān)哼@個(gè)例子把文件保存到了名為 "upload" 的新文件夾。PHP Cookiescookie 常用于識(shí)別用戶(hù)。 常用于識(shí)別用戶(hù)。什么是 Cookie? ?cookie 常用于識(shí)別用戶(hù)。cookie 是服務(wù)器留在用戶(hù)計(jì)算機(jī)中的小文件。每當(dāng)相同的計(jì)算機(jī)通過(guò)瀏覽器請(qǐng) 求頁(yè)面時(shí),它同時(shí)會(huì)發(fā)送 cookie。通過(guò) PHP,您能夠創(chuàng)建并取回 cookie 的值。如何創(chuàng)建 cookie? ?setcookie() 函數(shù)用于設(shè)置 cookie。注釋?zhuān)?注釋?zhuān)簊etcookie() 函數(shù)必須位于 標(biāo)簽之前。語(yǔ)法setcookie(name, value, expire, path, domain);例子 在下面的例子中,我們將創(chuàng)建名為 "user" 的 cookie,把為它賦值 "Alex Porter"。我們也規(guī)定了此 cookie 在一小時(shí)后過(guò)期:
注釋?zhuān)?注釋?zhuān)涸诎l(fā)送 cookie 時(shí),cookie 的值會(huì)自動(dòng)進(jìn)行 URL 編碼,在取回時(shí)進(jìn)行自動(dòng)解碼(為防止 URL 編 碼,請(qǐng)使用 setrawcookie() 取而代之) 。的值? 如何取回 Cookie 的值?PHP 的 $_COOKIE 變量用于取回 cookie 的值。在下面的例子中,我們?nèi)』亓嗣麨?"user" 的 cookie 的值,并把它顯示在了頁(yè)面上:在下面的例子中,我們使用 isset() 函數(shù)來(lái)確認(rèn)是否已設(shè)置了 cookie:
如何刪除 cookie? ?當(dāng)刪除 cookie 時(shí),您應(yīng)當(dāng)使過(guò)期日期變更為過(guò)去的時(shí)間點(diǎn)。刪除的例子:該怎么辦? 如果瀏覽器不支持 cookie 該怎么辦?如果您的應(yīng)用程序涉及不支持 cookie 的瀏覽器,您就不得不采取其他方法在應(yīng)用程序中從一張頁(yè)面向另 一張頁(yè)面?zhèn)鬟f信息。一種方式是從表單傳遞數(shù)據(jù)(有關(guān)表單和用戶(hù)輸入的內(nèi)容,稍早前我們已經(jīng)在本教程 中介紹過(guò)了) 。下面的表單在用戶(hù)單擊提交按鈕時(shí)向 "welcome.php" 提交了用戶(hù)輸入:
Name: Age:
取回 "welcome.php" 中的值,就像這樣:
Welcome .
You are years old. PHP SessionsPHP session 變量用于存儲(chǔ)有關(guān)用戶(hù)會(huì)話(huà)的信息,或更改用戶(hù)會(huì)話(huà)的設(shè)置。Session 變量保存的信息 變量用于存儲(chǔ)有關(guān)用戶(hù)會(huì)話(huà)的信息,或更改用戶(hù)會(huì)話(huà)的設(shè)置。 是單一用戶(hù)的,并且可供應(yīng)用程序中的所有頁(yè)面使用。 是單一用戶(hù)的,并且可供應(yīng)用程序中的所有頁(yè)面使用。 所有頁(yè)面使用PHP Session 變量當(dāng)您運(yùn)行一個(gè)應(yīng)用程序時(shí),您會(huì)打開(kāi)它,做些更改,然后關(guān)閉它。這很像一次會(huì)話(huà)。計(jì)算機(jī)清楚你是誰(shuí)。 它知道你何時(shí)啟動(dòng)應(yīng)用程序,并在何時(shí)終止。但是在因特網(wǎng)上,存在一個(gè)問(wèn)題:服務(wù)器不知道你是誰(shuí)以及 你做什么,這是由于 HTTP 地址不能維持狀態(tài)。通過(guò)在服務(wù)器上存儲(chǔ)用戶(hù)信息以便隨后使用, PHP session 解決了這個(gè)問(wèn)題 (比如用戶(hù)名稱(chēng)、 購(gòu)買(mǎi)商品等) 。 不過(guò),會(huì)話(huà)信息是臨時(shí)的,在用戶(hù)離開(kāi)網(wǎng)站后將被刪除。如果您需要永久儲(chǔ)存信息,可以把數(shù)據(jù)存儲(chǔ)在數(shù) 據(jù)庫(kù)中。Session 的工作機(jī)制是: 為每個(gè)訪(fǎng)問(wèn)者創(chuàng)建一個(gè)唯一的 id (UID), 并基于這個(gè) UID 來(lái)存儲(chǔ)變量。 UID 存 儲(chǔ)在 cookie 中,亦或通過(guò) URL 進(jìn)行傳導(dǎo)。開(kāi)始 PHP Session在您把用戶(hù)信息存儲(chǔ)到 PHP session 中之前,首先必須啟動(dòng)會(huì)話(huà)。注釋?zhuān)?注釋?zhuān)簊ession_start() 函數(shù)必須位于 標(biāo)簽之前:
上面的代碼會(huì)向服務(wù)器注冊(cè)用戶(hù)的會(huì)話(huà), 以便您可以開(kāi)始保存用戶(hù)信息, 同時(shí)會(huì)為用戶(hù)會(huì)話(huà)分配一個(gè) UID。存儲(chǔ) Session 變量存儲(chǔ)和取回 session 變量的正確方法是使用 PHP $_SESSION 變量: 輸出:Pageviews=1在下面的例子中, 我們創(chuàng)建了一個(gè)簡(jiǎn)單的 page-view 計(jì)數(shù)器。 isset() 函數(shù)檢測(cè)是否已設(shè)置 "views" 變 量。如果已設(shè)置 "views" 變量,我們累加計(jì)數(shù)器。如果 "views" 不存在,則我們創(chuàng)建 "views" 變量, 并把它設(shè)置為 1:
終結(jié) Session如果您希望刪除某些 session 數(shù)據(jù),可以使用 unset() 或 session_destroy() 函數(shù)。unset() 函數(shù)用于釋放指定的 session 變量:您也可以通過(guò) session_destroy() 函數(shù)徹底終結(jié) session:注釋?zhuān)?注釋?zhuān)簊ession_destroy() 將重置 session,您將失去所有已存儲(chǔ)的 session 數(shù)據(jù)。PHP 發(fā)送電子郵件PHP 允許您從腳本直接發(fā)送電子郵件。 允許您從腳本直接發(fā)送電子郵件。PHP mail() 函數(shù)PHP mail() 函數(shù)用于從腳本中發(fā)送電子郵件。
語(yǔ)法mail(to,subject,message,headers,parameters) 參數(shù) to subject 描述 必需。規(guī)定 email 接收者。 必需。規(guī)定 email 的主題。注釋?zhuān)涸搮?shù)不能包含任何新行 字符。 message headers 必需。定義要發(fā)送的消息。應(yīng)使用 LF (\n) 來(lái)分隔各行。 可選。規(guī)定附加的標(biāo)題,比如 From、Cc 以及 Bcc。 應(yīng)當(dāng)使用 CRLF (\r\n) 分隔附加的標(biāo)題。 parameters 可選。對(duì)郵件發(fā)送程序規(guī)定額外的參數(shù)。注釋?zhuān)?PHP 需要一個(gè)已安裝且正在運(yùn)行的郵件系統(tǒng), 以便使郵件函數(shù)可用。 所用的程序通過(guò)在 php.ini 文 注釋?zhuān)?件中的配置設(shè)置進(jìn)行定義。請(qǐng)?jiān)谖覀兊?PHP Mail 參考手冊(cè)閱讀更多內(nèi)容。PHP 簡(jiǎn)易 E-Mail通過(guò) PHP 發(fā)送電子郵件的最簡(jiǎn)單的方式是發(fā)送一封文本 email。在下面的例子中, 我們首先聲明變量($to, $subject, $message, $from, $headers), 然后我們?cè)?mail() 函數(shù)中使用這些變量來(lái)發(fā)送了一封 e-mail:PHP Mail Form
通過(guò) PHP, 您能夠在自己的站點(diǎn)制作一個(gè)反饋表單。 下面的例子向指定的 e-mail 地址發(fā)送了一條文本消 息:
?> 例子解釋?zhuān)?例子解釋?zhuān)?1 2 3 4 首先,檢查是否填寫(xiě)了郵件輸入框 如果未填寫(xiě)(比如在頁(yè)面被首次訪(fǎng)問(wèn)時(shí)) ,輸出 HTML 表單 如果已填寫(xiě)(在表單被填寫(xiě)后) ,從表單發(fā)送郵件 當(dāng)點(diǎn)擊提交按鈕后,重新載入頁(yè)面,顯示郵件發(fā)送成功的消息PHP 安全的電子郵件腳本中,存在著一個(gè)漏洞。 在上一節(jié)中的 PHP e-mail 腳本中,存在著一個(gè)漏洞。PHP E-mail 注入首先,請(qǐng)看上一節(jié)中的 PHP 代碼:
else /pic/p>
Email:
Subject:
Message:
"; } ?> 以上代碼存在的問(wèn)題是,未經(jīng)授權(quán)的用戶(hù)可通過(guò)輸入表單在郵件頭部插入數(shù)據(jù)。假如用戶(hù)在表單中的輸入框內(nèi)加入這些文本,會(huì)出現(xiàn)什么情況呢?someone@example.com%0ACc:person2@example.com %0ABcc:person3@example.com,person3@example.com, anotherperson4@example.com,person5@example.com %0ABTo:person6@example.com與往常一樣, mail() 函數(shù)把上面的文本放入郵件頭部, 那么現(xiàn)在頭部有了額外的 Cc:, Bcc: 以及 To: 字 段。當(dāng)用戶(hù)點(diǎn)擊提交按鈕時(shí),這封 e-mail 會(huì)被發(fā)送到上面所有的地址!PHP 防止 E-mail 注入防止 e-mail 注入的最好方法是對(duì)輸入進(jìn)行驗(yàn)證。下面的代碼與上一節(jié)類(lèi)似,不過(guò)我們已經(jīng)增加了檢測(cè)表單中 email 字段的輸入驗(yàn)證程序:
else {/pic/pic/p>
Email:
Subject:
Message:
"; } ?> 在上面的代碼中,我們使用了 PHP 過(guò)濾器來(lái)對(duì)輸入進(jìn)行驗(yàn)證: ? ? FILTER_SANITIZE_EMAIL 從字符串中刪除電子郵件的非法字符 FILTER_VALIDATE_EMAIL 驗(yàn)證電子郵件地址您可以在我們的 PHP 過(guò)濾器這一節(jié)中閱讀更多有關(guān)過(guò)濾器的內(nèi)容。
PHP 錯(cuò)誤處理默認(rèn)的錯(cuò)誤處理很簡(jiǎn)單。一條消息會(huì)被發(fā)送到瀏覽器,這條消息帶有文件名、 在 PHP 中,默認(rèn)的錯(cuò)誤處理很簡(jiǎn)單。一條消息會(huì)被發(fā)送到瀏覽器,這條消息帶有文件名、行號(hào)以及一條 描述錯(cuò)誤的消息。 描述錯(cuò)誤的消息。PHP 錯(cuò)誤處理在創(chuàng)建腳本和 web 應(yīng)用程序時(shí),錯(cuò)誤處理是一個(gè)重要的部分。如果您的代碼缺少錯(cuò)誤檢測(cè)編碼,那么程 序看上去很不專(zhuān)業(yè),也為安全風(fēng)險(xiǎn)敞開(kāi)了大門(mén)。本教程介紹了 PHP 中一些最為重要的錯(cuò)誤檢測(cè)方法。我們將為您講解不同的錯(cuò)誤處理方法: ? ? ? 簡(jiǎn)單的 "die()" 語(yǔ)句 自定義錯(cuò)誤和錯(cuò)誤觸發(fā)器 錯(cuò)誤報(bào)告基本的錯(cuò)誤處理: 基本的錯(cuò)誤處理:使用 die() 函數(shù)第一個(gè)例子展示了一個(gè)打開(kāi)文本文件的簡(jiǎn)單腳本:如果文件不存在,您會(huì)獲得類(lèi)似這樣的錯(cuò)誤:Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:\webfolder\test.php on line 2為了避免用戶(hù)獲得類(lèi)似上面的錯(cuò)誤消息,我們?cè)谠L(fǎng)問(wèn)文件之前檢測(cè)該文件是否存在:
{ $file=fopen("welcome.txt","r"); } ?>現(xiàn)在,假如文件不存在,您會(huì)得到類(lèi)似這樣的錯(cuò)誤消息:File not found比起之前的代碼,上面的代碼更有效,這是由于它采用了一個(gè)簡(jiǎn)單的錯(cuò)誤處理機(jī)制在錯(cuò)誤之后終止了腳本。不過(guò),簡(jiǎn)單地終止腳本并不總是恰當(dāng)?shù)姆绞。讓我們研究一下用于處理錯(cuò)誤的備選的 PHP 函數(shù)。創(chuàng)建自定義錯(cuò)誤處理器創(chuàng)建一個(gè)自定義的錯(cuò)誤處理器非常簡(jiǎn)單。我們很簡(jiǎn)單地創(chuàng)建了一個(gè)專(zhuān)用函數(shù),可以在 PHP 中發(fā)生錯(cuò)誤時(shí) 調(diào)用該函數(shù)。該函數(shù)必須有能力處理至少兩個(gè)參數(shù) (error level 和 error message), 但是可以接受最多五個(gè)參數(shù) (可 選的:file, line-number 以及 error context) :語(yǔ)法error_function(error_level,error_message, error_file,error_line,error_context) 參數(shù) error_level 描述 必需。為用戶(hù)定義的錯(cuò)誤規(guī)定錯(cuò)誤報(bào)告級(jí)別。必須是一個(gè)值數(shù)。 參見(jiàn)下面的表格:錯(cuò)誤報(bào)告級(jí)別。 error_message error_file error_line error_context 必需。為用戶(hù)定義的錯(cuò)誤規(guī)定錯(cuò)誤消息。 可選。規(guī)定錯(cuò)誤在其中發(fā)生的文件名。 可選。規(guī)定錯(cuò)誤發(fā)生的行號(hào)。 可選。規(guī)定一個(gè)數(shù)組,包含了當(dāng)錯(cuò)誤發(fā)生時(shí)在用的每個(gè)變量以及 它們的值。錯(cuò)誤報(bào)告級(jí)別
這些錯(cuò)誤報(bào)告級(jí)別是錯(cuò)誤處理程序旨在處理的錯(cuò)誤的不同的類(lèi)型: 值 2 8 常量 E_WARNING E_NOTICE 描述 非致命的 run-time 錯(cuò)誤。不暫停腳本執(zhí)行。 Run-time 通知。 腳本發(fā)現(xiàn)可能有錯(cuò)誤發(fā)生,但也可能在腳本正常運(yùn)行時(shí)發(fā)生。 256 E_USER_ERROR 致命的用戶(hù)生成的錯(cuò)誤。這類(lèi)似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_ERROR。 512 E_USER_WARNI NG 1024 E_USER_NOTICE 非致命的用戶(hù)生成的警告。這類(lèi)似于程序員使用 PHP 函數(shù) trigger_error() 設(shè)置的 E_WARNING。 用戶(hù)生成的通知。這類(lèi)似于程序員使用 trigger_error() 設(shè)置的 E_NOTICE。 4096 E_RECOVERABL E_ERROR 8191 E_ALL 可捕獲的致命錯(cuò)誤。類(lèi)似 E_ERROR,但可被用戶(hù)定義的處理 程序捕獲。(參見(jiàn) set_error_handler()) 所有錯(cuò)誤和警告,除級(jí)別 E_STRICT 以外。 (在 PHP 6.0,E_STRICT 是 E_ALL 的一部分) PHP 函 數(shù)現(xiàn)在,讓我們創(chuàng)建一個(gè)處理錯(cuò)誤的函數(shù):function customError($errno, $errstr) { echo "Error: [$errno] $errstr
"; echo "Ending Script"; die(); }上面的代碼是一個(gè)簡(jiǎn)單的錯(cuò)誤處理函數(shù)。當(dāng)它被觸發(fā)時(shí),它會(huì)取得錯(cuò)誤級(jí)別和錯(cuò)誤消息。然后它會(huì)輸出錯(cuò) 誤級(jí)別和消息,并終止腳本,F(xiàn)在,我們已經(jīng)創(chuàng)建了一個(gè)錯(cuò)誤處理函數(shù),我們需要確定在何時(shí)觸發(fā)該函數(shù)。Set Error HandlerPHP 的默認(rèn)錯(cuò)誤處理程序是內(nèi)建的錯(cuò)誤處理程序。 我們打算把上面的函數(shù)改造為腳本運(yùn)行期間的默認(rèn)錯(cuò)誤 處理程序。
可以修改錯(cuò)誤處理程序,使其僅應(yīng)用到某些錯(cuò)誤,這樣腳本就可以不同的方式來(lái)處理不同的錯(cuò)誤。不過(guò), 在本例中,我們打算針對(duì)所有錯(cuò)誤來(lái)使用我們的自定義錯(cuò)誤處理程序:set_error_handler("customError");由于我們希望我們的自定義函數(shù)來(lái)處理所有錯(cuò)誤,set_error_handler() 僅需要一個(gè)參數(shù),可以添加第二 個(gè)參數(shù)來(lái)規(guī)定錯(cuò)誤級(jí)別。實(shí)例 通過(guò)嘗試輸出不存在的變量,來(lái)測(cè)試這個(gè)錯(cuò)誤處理程序:以上代碼的輸出應(yīng)該類(lèi)似這樣:Custom error: [8] Undefined variable: test觸發(fā)錯(cuò)誤在腳本中用戶(hù)輸入數(shù)據(jù)的位置,當(dāng)用戶(hù)的輸入無(wú)效時(shí)觸發(fā)錯(cuò)誤的很有用的。在 PHP 中,這個(gè)任務(wù)由 trigger_error() 完成。例子
在本例中,如果 "test" 變量大于 "1",就會(huì)發(fā)生錯(cuò)誤:1) { trigger_error("Value must be 1 or below"); } ?>以上代碼的輸出應(yīng)該類(lèi)似這樣:Notice: Value must be 1 or below in C:\webfolder\test.php on line 6您可以在腳本中任何位置觸發(fā)錯(cuò)誤,通過(guò)添加的第二個(gè)參數(shù),您能夠規(guī)定所觸發(fā)的錯(cuò)誤級(jí)別?赡艿腻e(cuò)誤類(lèi)型: 可能的錯(cuò)誤類(lèi)型: ? ? ? E_USER_ERROR - 致命的用戶(hù)生成的 run-time 錯(cuò)誤。錯(cuò)誤無(wú)法恢復(fù)。腳本執(zhí)行被中斷。 E_USER_WARNING - 非致命的用戶(hù)生成的 run-time 警告。腳本執(zhí)行不被中斷。 E_USER_NOTICE - 默認(rèn)。用戶(hù)生成的 run-time 通知。腳本發(fā)現(xiàn)了可能的錯(cuò)誤,也有可能在腳本運(yùn)行正常時(shí)發(fā)生。 例子 在本例中,如果 "test" 變量大于 "1",則發(fā)生 E_USER_WARNING 錯(cuò)誤。如果發(fā)生了 E_USER_WARNING,我們將使用我們的自定義錯(cuò)誤處理程序并結(jié)束腳本:
【PHP高級(jí)教程】相關(guān)文章:
原創(chuàng)PHP教程:變量09-26
php基礎(chǔ)教程01-23
PHP環(huán)境搭建教程03-02
PHP文件寫(xiě)入和讀取教程12-31
Windows下的PHP安裝pear教程11-07
php生成靜態(tài)頁(yè)面的詳細(xì)教程12-29
PHP中使用curl入門(mén)教程01-07
php中的curl使用入門(mén)教程01-17
PHP7多線(xiàn)程搭建教程詳解 10-11