php錯誤處理
當我們開發程式時,有時候程式出現了問題,我們就可以用以下幾種辦法找出錯誤。
開發階段:開發時輸出所有的錯誤報告,有利於我們進行程式除錯
執行階段:我們不要讓程式輸出任何一種錯誤報告(不能讓使用者看到(包括懂技術, 不懂技術的人))
將錯誤報告寫入日誌中
一、指定錯誤報告 error_reporting = e_ll
二、關閉錯誤輸出 display_errors = off
三、開啟錯誤日誌功能 log_errors = on
1. 預設如果不指定錯誤日誌位置,則預設寫web伺服器的日誌中
2. 為error_log選項指定 乙個檔名(可寫)
3. 寫入到作業系統日誌中error_log=syslog
以下**示例
<?php
// error_reporting(e_all);
/// ini_set("display_errors", "off");
// ini_set("error_log", "syslog");
// ini_set("max_fileupload", 200000000);
// echo ini_get("upload_max_filesize");
// error_log("this is a error message!!!!");
gettype($var); //注意
gettype(); //警告
gettye(); //錯誤 會終止程式執行
echo "###########################
";?>
當然php還提供了函式error_get_last()來獲得錯誤資訊
函式定義和用法
error_get_last()函式獲取最後發生的錯誤。該函式以陣列的形式返回最後發生的錯誤。返回的陣列包含 4 個鍵和值: [type] - 錯誤型別 [message] - 錯誤訊息 [file] - 發生錯誤所在的檔案 [line] - 發生錯誤所在的
小例子:
<?php echo $test; print_r(error_get_last()); ?>輸出:
array ( [type] => 8 [message] => undefined variable: test [file] => d:\www\test.php [line] => 2 )
所以這樣我們也很方便了…這樣是不是對除錯程式和排查錯誤的時候很有幫助呢?
這些錯誤報告級別是錯誤處理程式旨在處理的錯誤的不同的型別:
值 常量 描述托福答案
www.yztrans.com
2 e_warning 非致命的 run-time 錯誤。不暫停指令碼執行。
8 e_notice run-time 通知。
指令碼發現可能有錯誤發生,但也可能在指令碼正常執行時發生。
256 e_user_error 致命的使用者生成的錯誤。這類似於程式設計師使用 php 函式 trigger_error() 設定的 e_error.
512 e_user_warning 非致命的使用者生成的警告。這類似於程式設計師使用 php 函式 trigger_error() 設定的 e_warning.
1024 e_user_notice 使用者生成的通知。這類似於程式設計師使用 php 函式 trigger_error() 設定的 e_notice.
4096 e_recoverable_error 可捕獲的致命錯誤。類似 e_error,但可被使用者定義的處理程式捕獲。(參見 set_error_handler())
8191 e_all 所有錯誤和警告,除級別 e_strict 以外。
(在 php 6.0,e_strict 是 e_all 的一部分)
php異常處理機制
定義:異常處理: 意外,是在程式執行過程中發生的意料這外的事,使用異常改變指令碼正常流程
語法格式:
trycatch(exception $e)
php中try{}catch{}是異常處理。
將要執行的**放入try塊中,如果這些**執行過程中某一條語句發生異常,則程式直接跳轉到catch塊中,由$e收集錯誤資訊和顯示。
php中try{}catch{}語句
為了進一步處理異常,我們需要使用php中try{}catch{}----包括try語句和至少乙個的catch語句。任何呼叫 可能丟擲異常的方法的**都應該使用try語句。catch語句用來處理可能丟擲的異常。
例子:我寫一段**:
自己定義乙個異常類
作用:就是寫乙個或多個方法解決當發生這個異常時的處理方式
1. 自己定義異常類,必須是exception(內建類)的子類, 可以檢視php手冊裡面exception(內建類)的使用方法
2. exception類中的只有構造方法和tostring()可以重寫, 其它都final
<?php
class openfileexception extends exception
function open()
}?>
1. 如果try中**沒有問題,則將try中**執行完後就到catch後執行
2. 如果try中**有異常發生,則丟擲乙個異常物件(使用throw),丟擲給了catch中的引數, 則在try中**就不會再繼續執行下去 直接跳轉到catch中去執行, catch中執行完成, 再繼續向下執行
注意: 提示發生了什麼異常,這不是主要我們要做事,需要在catch中解決這個異常, 如果解決不了,則出去給使用者在下面**中,如果我沒有這個tmp.txt檔案的話,就會丟擲異常了。
如果有異常,我們呼叫open方法就可以解決這個異常了。
<?php
trycatch(openfileexception $e)
下面將**進行整理以及多個異常處理方法:
<?php
/** 異常處理: 意外,是在程式執行過程中發生的意料這外的事,使用異常改變指令碼正常流程
** php5中的乙個新的重要特性
** if()else
** try catch(異常物件)
** 1. 如果try中**沒有問題,則將try中**執行完後就到catch後執行
* 2. 如果try中**有異常發生,則丟擲乙個異常物件(使用throw),丟擲給了catch中的引數, 則在try中**就不會再繼續執行下去
* 直接跳轉到catch中去執行, catch中執行完成, 再繼續向下執行www.jx-jf.com
**
* 注意: 提示發生了什麼異常,這不是主要我們要做事,需要在catch中解決這個異常, 如果解決不了,則出去給使用者
** 二、自己定義乙個異常類
** 作用:就是寫乙個或多個方法解決當發生這個異常時的處理方式
** 1. 自己定義異常類,必須是exception(內建類)的子類,
* 2. exception類中的只有構造方法和tostring()可以重寫, 其它都final
** 三、處理多個異常**
* 自己定義功能類時如果在方法中丟擲異常**
*/class openfileexception extends exception
function open()
}class demoexception extends exception
}class testexception extends exception
}class helloexception extends exception
class myclass
function demo($num=0)
function test($num=0)
function fun($num=0)
}trycatch(openfileexception $e)catch(demoexception $e)catch(testexception $e)catch(exception $e)
var_dump($file);
echo "444444444444444444444
";
php 高階(錯誤處理和異常處理)
1.回顧 上篇學習了php中關於cookie和session的操作 2.這篇學習php高階中的錯誤處理和exception異常處理 3.錯誤處理 3.1 了解 預設錯誤處理很簡單,將訊息傳送到瀏覽器,告知檔名,行號,以及描述錯誤的訊息 錯誤處理是很重要的,如果 缺少錯誤檢測編碼,那麼看著很不專業,帶...
PHP 錯誤處理及異常處理
1.設定自己的錯誤處理函式 trigger error 捕捉使用者級別的錯誤。set error handler 使用者自定義錯誤處理函式。2.捕獲異常 捕獲異常當然用trycatch 當然 中使用的異常處理類是thinkphp中,throw exception 為thinkphp的丟擲異常函式 另...
自定義php錯誤處理和php異常處理
要想處理php異常,就要先知道php的錯誤級別,看看下面 值 常量 描述 2 e warning 非致命的 run time 錯誤。不暫停指令碼執行。8 e notice run time 通知。指令碼發現可能有錯誤發生,但也可能在指令碼正常執行時發生。256e user error 致命的使用者生...