PHP Notice 關(guān)閉的原因及如何關(guān)閉
在日常的開發(fā)中,經(jīng)常會(huì)遇到 PHP Notice 的提示,告訴我們某些代碼的使用不規(guī)范,某些變量沒有初始化等等。有些開發(fā)者可能會(huì)認(rèn)為這些提示并不是錯(cuò)誤,只是在提醒我們代碼的規(guī)范性問題。但是,這些 Notice 提示會(huì)在某些場(chǎng)景下導(dǎo)致嚴(yán)重后果,比如和某些第三方庫或系統(tǒng)集成時(shí),輸出的 Notice 是無法被處理的,整個(gè)系統(tǒng)可能會(huì)出現(xiàn)災(zāi)難性的后果。
下面介紹如何關(guān)閉 PHP Notice 提示,同時(shí)提供一些實(shí)用的代碼示例。
如何關(guān)閉 PHP Notice 提示
關(guān)閉 PHP Notice 提示,有以下兩種方法:
方法一:修改 php.ini 配置文件
在 php.ini 配置文件中找到 error_reporting 配置項(xiàng),修改為以下值:
error_reporting = E_ALL & ~E_NOTICE
這將關(guān)閉 PHP Notice 提示,并將其他所有錯(cuò)誤信息都輸出。修改完畢后,重啟 PHP 服務(wù)即可生效。
方法二:使用代碼忽略 Notice 級(jí)別提示
在 PHP 代碼中,使用 error_reporting 函數(shù)和 ini_set 函數(shù)可以臨時(shí)關(guān)閉 Notice 級(jí)別提示。
示例代碼:
// 所有級(jí)別的錯(cuò)誤都輸出
error_reporting(E_ALL);
// 或者 error_reporting(-1);
// 輸出除了 Notice 級(jí)別的錯(cuò)誤
error_reporting(E_ALL & ~E_NOTICE);
// 關(guān)閉所有錯(cuò)誤提示
error_reporting(0);
// 使用 ini_set 函數(shù)設(shè)置
ini_set('error_reporting', E_ALL & ~E_NOTICE);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'On');
ini_set('error_log', '/var/log/php/error.log');
實(shí)用代碼示例
1.過濾 $_POST 和 $_GET 數(shù)據(jù)
開發(fā)階段,使用 $_POST['name'] 或者 $_GET['id'] 可能會(huì)出現(xiàn) Notice,可以使用 isset 函數(shù)或者 empty 函數(shù)來避免 Notice 提示。
示例代碼:
if (isset($_POST['name'])) { // do something } if (!empty($_GET['id'])) { // do something }2.過濾未賦值變量 在函數(shù)中或者控制器中,有些變量可能是在后面代碼中賦值的,但是還是可能會(huì)出現(xiàn) Notice。使用 isset 函數(shù)來判斷是否賦值可以避免 Notice 提示。 示例代碼:
function test() { $a = isset($_POST['name']) ? $_POST['name'] : ''; // do something } $name = isset($_POST['name']) ? $_POST['name'] : ''; // use $name3.過濾數(shù)組數(shù)據(jù) 使用數(shù)組時(shí),一些元素可能沒有被定義,使用 isset 函數(shù)可以避免 Notice 提示。 示例代碼:
$arr = array('name' =>'john'); if (isset($arr['age'])) { echo $arr['age']; }總結(jié) PHP Notice 提示可能在某些場(chǎng)景下導(dǎo)致災(zāi)難性的后果,開發(fā)階段應(yīng)及時(shí)發(fā)現(xiàn)并修復(fù) Notice 提示,同時(shí)關(guān)閉 Notice 提示也是重要的安全措施。本文介紹了關(guān)閉 Notice 提示的兩種方法,并提供了一些實(shí)用的代碼示例,希望對(duì) PHP 開發(fā)者有所幫助。