錯誤處理
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 中一些最為重要的錯誤檢測方法。...