php錯誤處理和php異常處理機制

2022-08-29 03:54:14 字數 4023 閱讀 2700

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 致命的使用者生...