PHP筆記4 常用函式 錯誤處理

2021-10-09 08:41:28 字數 4489 閱讀 9611

錯誤處理

print():類似於echo輸出提供的內容,本質是一種結構(不是函式),返回1,可以不需要使用括號(因為是結構不是函式)

print_r():類似於var_dump,但是比var_dump簡單,不會輸出資料的型別,只會輸出值(陣列列印使用比較多)

echo print

('hello ')

;//1

print 'hello ';

//hello

$a =

'hello world'

;//hello world

print_r

($a)

date():按照指定格式對對應的時間戳(從2023年格林威治時間開始計算的秒數)轉換成對應的格式,

如果沒有指定特定的時間戳,那麼就是預設解釋當前時間戳

time():獲取當前時間對應的時間戳

microtime():獲取微秒級別的時間

strtotime():按照規定格式的字串轉換成時間戳 (中文不行)

print date

('y年m月d日 ')

;//2023年09月10日

echo '1';

print time()

;//1599747674

echo '2';

print microtime()

; 1599747765

echo '3';

print strtotime

('tomorrow 10 hour');

max():指定引數中最大的值

min():比較兩個數中較小的值

rand():得到乙個隨機數,指定區間的隨機整數

mt_rand():與rand一樣,只是底層結構不一樣,效率比rand高(建議使用)

round():四捨五入

ceil():向上取整

floor():向下取整

pow():求指定數字的指定指數次結果:pow(2,8) == 2^8 == 256

abs():絕對值

sqrt():求平方根

function_exists():判斷指定的函式名字是否在記憶體中存在(幫助使用者不去使用乙個不存在的函式,讓**安全性更高)

func_get_arg():在自定義函式中去獲取指定數值對應的引數 – 實參位置

func_get_args():在自定義函式中獲取所有的引數(陣列)-- 所有實參

func_num_args():獲取當前自定義函式的引數數量 – 實參數量

function test ($a,$b)

var_dump

(func_num_args()

);// int(4)

}function_exists

('test')&&

test(1

,'2',3

,4);

指的是系統(或者使用者)在對某些**進行執行的時候,發現有錯誤,就會通過錯誤處理的形式告知程式設計師

1)語法錯誤(編譯錯誤):使用者書寫的**不符合php的語法規範,語法錯誤會導致**在編譯過程中不通過,所以**不會執行(parse error)

2)執行時錯誤:**編譯通過,但是**在執行的過程中會出現一些條件不滿足導致的錯誤(runtime error)

3)邏輯錯誤:程式設計師在寫**的時候不夠規範,出現了一些邏輯性的錯誤,導致**正常執行,但是得不到想要的結果

所有看到的錯誤代號在php中都被定義成了系統常量(可以直接使用)

1)系統錯誤:

e_parse:parse error,編譯錯誤,**不會執行

e_error:fatal error,致命錯誤,會導致**不能正確繼續執行(出錯的位置斷掉)

e_warning:warning,警告錯誤,不會影響**執行,但是可能得到意想不到的結果

e_notice:notice,通知錯誤,不會影響**執行

2)使用者錯誤:

e_user_error, e_user_warning, e_user_notice

使用者在使用自定義錯誤觸發的時候,會使用到的錯誤代號(系統不會用到)

3)其他:

e_all,代表著所有的錯誤(通常在進行錯誤控制的時候使用比較多),建議在開發過程中(開發環境)使用

所有以e開頭的錯誤常量(代號)其實都是由乙個位元組儲存,每一種錯誤佔據乙個對應的位(比如0000 0001 表示e_error,0000 0010表示e_warning),如果想進行一些錯誤的控制,可以使用位運算進行操作

排除通知級別notice:e_all & ~e_notice

(解釋:比如e_all為11111111,e_notice為00000100,則~e_notice為11111011,&運算後為11111011,則為排除了e_notice)

只要警告和通知:e_warning | e_notice

(解釋:比如e_warning為00000010,e_notice為00000100,|運算後為00000110,則表示只包含了e_warning和e_notice)

程式執行時觸發:系統自動根據錯誤發生後,對比對應的錯誤資訊,輸出給使用者(主要針對**的語法錯誤和執行時錯誤)

人為觸發:知道某些邏輯可能會出錯,從而使用對應的判斷**來觸發響應的錯誤提示

認為觸發方式,trigger_error(錯誤提示,產生乙個使用者級別的 error/warning/notice 資訊)

$b =0;

if($b ==0)

錯誤顯示設定:哪些錯誤該顯示,以及該如何顯示.在php中,其實有兩種方式來設定當前指令碼的錯誤處理

1、php的配置檔案:全域性配置:php.ini檔案

display_errors:是否顯示錯誤

error_reporting:顯示什麼級別的錯誤

display_errors = on

error_reporting = e_all

2、可以在執行的php指令碼中去設定:在指令碼中定義的配置項級別比配置檔案高(通常在開發當中都會在**中去進行控制和配置)

error_reporting():設定對應的錯誤顯示級別,沒有引數表示獲取當前系統錯誤處理對應的級別

設定舉例:error_reporting(e_error | e_warning | e_parse)

ini_set(『配置檔案中的配置項』,配置值)

ini_set(『error_reporting』,e_all);

ini_set(『display_errors』,1);

在實際生產環境中,不會直接讓錯誤赤裸裸的展示給使用者:

1、 不友好

2、 不安全:錯誤會暴露**很多資訊(路徑、檔名)

所以在生產環境中,一般不顯示錯誤(錯誤也比較少),但是不可能避免會出現錯誤(測試的時候不會發現所有的問題),這個時候不希望看到,但是又希望捕捉到可以讓後台程式設計師去修改:需要儲存到日誌檔案中,

需要在php配置檔案中或者**中(ini_set)設定對應error_log配置項

1、 開啟日誌功能

log_errors = on
2、指定路徑 (指定檔案不會自動生成,必須手動建立)

error_log =

'c:/e/server/logs/php_errors.log'

最簡單的錯誤處理:trigger_errors()函式,但是該函式不會阻止系統報錯

php系統提供了一種使用者處理錯誤的機制:使用者自定義錯誤處理函式,然後將該函式增加操系統錯誤處理的控制代碼中,然後系統會在碰到錯誤之後,使用使用者定義的錯誤函式。

1、如何將使用者自定義的函式放到系統中?set_error_handler()

2、自定義錯誤處理函式,系統有要求 參見文件

//自定義錯誤處理機制

header

('content-type:text/html;charset=utf-8');

//方法 前兩個引數 必須,後兩個引數可選

function my_error

($errno,$errstr,$errfile,$errline)

//echo 'string';

switch

($errno)

}// 註冊自定義函式:修改錯誤處理機制

echo $a;

//會報錯 notice: undefined variable: a in c:\e\server\www\test3.php on line 157

set_error_handler

('my_error');

//修改錯誤機制,使用自定義my_error函式處理

echo $a;

// 未報錯 顯示 5fatal error in file c:\e\server\www\test3.php line 163

當前屬於簡單自定義模式,如果要複雜,可以在某些影響**功能的錯誤發生後,讓使用者跳轉到某個指定介面。

linux網路程式設計基礎 常用函式錯誤處理封裝

include include include include void perr exit const char s 網路 intaccept int fd,struct sockaddr addr,socklen t addrlen return n int bind int fd,const ...

python 小數錯誤處理總結

原 版本 n1,n2 raw input split raw input split res str reduce lambda a,b 10a b,map lambda x ord x 0 ord x 1 2ord 0 list z l n1 1 1 n2 1 1 fillvalue 0 1 c ...

PHP 錯誤處理

在 php 中,預設的錯誤處理很簡單。一條訊息會被傳送到瀏覽器,這條訊息帶有檔名 行號以及一條描述錯誤的訊息。在建立指令碼和 web 應用程式時,錯誤處理是乙個重要的部分。如果您的 缺少錯誤檢測編碼,那麼程式看上去很不專業,也為安全風險敞開了大門。本教程介紹了 php 中一些最為重要的錯誤檢測方法。...