set_error_handler() - 指定一個自定函式作為 PHP 錯誤處理的函式。
這個函式是用來告知 PHP 引擎,我們所自定的錯誤處理函式的名稱,自定的錯誤處理函式的名稱可以自行命名,但必須遵守以下傳入變數的次序及數量。
function ErrorHandler($type, $msg, $file, $line){
}
範例:
<?php
function ErrorHandler($type, $msg, $file, $line){
printf("$type, $msg, $file, $line, 除數不可為 0\n");
}
set_error_handler('ErrorHandler');
printf("%d\n", 1/0);
?>
輸出結果:
2, Division by zero, /var/www/html/error1.php, 7, 除數不可為 0 0
2009年4月23日 星期四
PHP 錯誤處理-錯誤等級相關函式 error_reporting
error_reporting() - 指定PHP程式只需要回報的錯誤等級其他的一律忽略。
參數說明:
範例:
1/0 會產生一個 WARNING 的錯誤等級,先將程式錯誤等級設為 E_ERROR ,則不會有錯誤訊息出現,因為已經被忽略了。
<?php
error_reporting(E_ERROR);
printf("%d\n", 1/0);
error_reporting(E_WARNING);
printf("%d\n", 1/0);
?>
輸出結果:
0
Warning: Division by zero in /var/www/html/error1.php on line 6
0
參考文件:
http://tw2.php.net/manual/en/errorfunc.constants.php#errorfunc.constants.errorlevels.e-error
參數說明:
Value | Constant | Description | Note |
1 | E_ERROR | 執行時期致命的錯誤 | |
2 | E_WARNING | 執行時期錯誤警告 | |
4 | E_PARSE | 編譯時的程式剖析錯誤 | |
8 | E_NOTICE | 執行時期的提醒 | |
16 | E_CORE_ERROR | PHP 引擎啟動執行時產生的致命錯誤 | |
32 | E_CORE_WARNING | PHP 引擎啟動執行時產生的警告 | since PHP 4 |
64 | E_COMPILE_ERROR | 致命的編譯時錯誤 | since PHP 4 |
128 | E_COMPILE_WARNING | 致命的編譯時警告 | since PHP 4 |
256 | E_USER_ERROR | 使用者定義的錯誤 | since PHP 4 |
512 | E_USER_WARNING | 使用者定義的警告 | since PHP 4 |
1024 | E_USER_NOTICE | 使用者定義的提醒 | since PHP 4 |
2048 | E_STRICT | 編碼標準化警告(建議如何修改以向前兼容) | since PHP 5 |
4096 | E_RECOVERABLE_ERROR | 接近致命的運行時錯誤,若未被捕獲則視同E_ERROR | since PHP 5.2.0 |
8192 | E_DEPRECATED | Run-time notices. Enable this to receive warnings about code that will not work in future versions. | since PHP 5.3.0 |
16384 | E_USER_DEPRECATED | User-generated warning message. This is like an E_DEPRECATED, except it is generated in PHP code by using the PHP function trigger_error(). | since PHP 5.3.0 |
30719 | E_ALL | 所有的錯誤、警告 | 32767 in PHP 6, 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously |
範例:
1/0 會產生一個 WARNING 的錯誤等級,先將程式錯誤等級設為 E_ERROR ,則不會有錯誤訊息出現,因為已經被忽略了。
<?php
error_reporting(E_ERROR);
printf("%d\n", 1/0);
error_reporting(E_WARNING);
printf("%d\n", 1/0);
?>
輸出結果:
0
Warning: Division by zero in /var/www/html/error1.php on line 6
0
參考文件:
http://tw2.php.net/manual/en/errorfunc.constants.php#errorfunc.constants.errorlevels.e-error
PHP 錯誤處理
PHP 程式的錯誤包含兩種類型:
1.程式編譯時發生的錯誤。
2.程式執行時發生的錯誤。
引起錯誤的原因可能是執行環境所導致的錯誤或者是程式中語法、語意或是邏輯的錯誤。
PHP 的錯誤處理可以處理直譯過程的語法、語意錯誤,或執行時的程式錯誤。PHP 4.0版之前即提供錯誤處理的機制,當程式發生錯誤時,可以提供不同的錯誤處理方式。
PHP 錯誤處理的4種等級:
1.Parser Errors:PHP程式碼語法和語意錯誤。
2.Fatal Errors:執行時間嚴重的錯誤,PHP引擎會停止執行程式。
3.Warnings:警告錯誤,PHP引擎會試圖繼續執行程式。
4.Notices:提醒程式碼可能出現的錯誤。
1.程式編譯時發生的錯誤。
2.程式執行時發生的錯誤。
引起錯誤的原因可能是執行環境所導致的錯誤或者是程式中語法、語意或是邏輯的錯誤。
PHP 的錯誤處理可以處理直譯過程的語法、語意錯誤,或執行時的程式錯誤。PHP 4.0版之前即提供錯誤處理的機制,當程式發生錯誤時,可以提供不同的錯誤處理方式。
PHP 錯誤處理的4種等級:
1.Parser Errors:PHP程式碼語法和語意錯誤。
2.Fatal Errors:執行時間嚴重的錯誤,PHP引擎會停止執行程式。
3.Warnings:警告錯誤,PHP引擎會試圖繼續執行程式。
4.Notices:提醒程式碼可能出現的錯誤。
2009年4月3日 星期五
使用 IMAP 伺服器作身份認證
<?php
//使用 IMAP 伺服器作身份認證
$server = 'imap-server';
$port = '143';
$userid = 'userid';
$password = 'password';
//檢查 $server $port 是否可以開啟
$fp = fsockopen ($server, $port, $errno, $errstr, 5);
if(!$fp) die('連線失敗');
//檢查 伺服器連線是否成功
$msg = fgets($fp, 256);
if(strpos($msg,"* OK")!=0) die('IMAP 伺服器連線失敗');
//傳送帳號密碼
fputs($fp, ". login $userid $password\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"* OK")!=0) die('帳號密碼錯誤');
else echo '認證成功';
fputs($fp, ". LOGOUT\r\n");
$msg = fgets($fp,256);
fclose($fp);
?>
//使用 IMAP 伺服器作身份認證
$server = 'imap-server';
$port = '143';
$userid = 'userid';
$password = 'password';
//檢查 $server $port 是否可以開啟
$fp = fsockopen ($server, $port, $errno, $errstr, 5);
if(!$fp) die('連線失敗');
//檢查 伺服器連線是否成功
$msg = fgets($fp, 256);
if(strpos($msg,"* OK")!=0) die('IMAP 伺服器連線失敗');
//傳送帳號密碼
fputs($fp, ". login $userid $password\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"* OK")!=0) die('帳號密碼錯誤');
else echo '認證成功';
fputs($fp, ". LOGOUT\r\n");
$msg = fgets($fp,256);
fclose($fp);
?>
2009年4月2日 星期四
使用 POP3 伺服器作身份認證
<?php
//使用 POP3 伺服器作身份認證
$server = 'pop3server';
$port = '110';
$userid = 'userid';
$password = 'password';
//檢查 $server $port 是否可以開啟
$fp = fsockopen ($server, $port, $errno, $errstr, 5);
if(!$fp) die('連線失敗');
//檢查 POP3 伺服器連線是否成功
$msg = fgets($fp, 256);
if(strpos($msg,"+OK")!=0) die('POP3 伺服器連線失敗');
//傳送帳號
fputs($fp, "USER $userid\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"+OK")!=0) die('帳號錯誤');
//傳送密碼
fputs($fp, "PASS $password\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"+OK")!=0) return die('密碼錯誤');
else echo '認證成功';
fputs($fp, "QUIT\r\n");
$msg = fgets($fp,256);
fclose($fp);
?>
參考文件
http://yu-minspace.blogspot.com/2009/04/rfc1939-pop3.html
//使用 POP3 伺服器作身份認證
$server = 'pop3server';
$port = '110';
$userid = 'userid';
$password = 'password';
//檢查 $server $port 是否可以開啟
$fp = fsockopen ($server, $port, $errno, $errstr, 5);
if(!$fp) die('連線失敗');
//檢查 POP3 伺服器連線是否成功
$msg = fgets($fp, 256);
if(strpos($msg,"+OK")!=0) die('POP3 伺服器連線失敗');
//傳送帳號
fputs($fp, "USER $userid\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"+OK")!=0) die('帳號錯誤');
//傳送密碼
fputs($fp, "PASS $password\r\n");
$msg = fgets($fp,256);
if(strpos($msg,"+OK")!=0) return die('密碼錯誤');
else echo '認證成功';
fputs($fp, "QUIT\r\n");
$msg = fgets($fp,256);
fclose($fp);
?>
參考文件
http://yu-minspace.blogspot.com/2009/04/rfc1939-pop3.html
RFC1939-POP3協定摘要
POP3伺服器
1.POP3伺服器偵聽 TCP 埠口 110。
2.當客戶主機需要使用服務時,它將與伺服器建立TCP連接。
3.當連接建立,POP3發送確認消息。客戶和POP3服務器相互(分別)交換命令和回應,這一過程一直要持續到連接終止。
POP3伺服器和客戶端的運作
1.在生命周期中,POP3會話有幾個不同的狀態(確認、操作及更新)。
2.一旦TCP連接被打開,而且POP3服務器發送了確認信息,此過程就進入了"確認"狀態。在此狀態中,客戶必須向POP3服務器確認自己是其的客戶。一旦確認成功,服務器就獲取與客戶郵件相關的資源,此時這一過程進入了"操作"狀態。在此狀態中,客戶提出服務,當客戶發出QUIT命令時,此過程進入了"更新"狀態。在此狀態中,POP3服務器釋放在"操作"狀態中取得的資源,並發送消息,終止連接。
POP3命令及訊息的交換
1.POP3命令由一個命令和一些參數組成。
2.所有命令以一個CRLF結束。
3.命令和參數由可顯示的ASCII字元組成,由空格間隔。
4.命令一般是三到四個字母,每個參數長度可達40個字元長度。
5.在發送第一行回應和一個CRLF之後,任何的附加信息行發送也由CRLF結束。
6.當所有信息發送結束時,發送最一行,包括一個結束字符(十進制碼46,也就是".")和一個CRLF。
7.如果信息中的任何一行以結束字符開始,此行就是通過在那一行預先裝入結束而進行字符填充的。因此,多行回應由五個CRLF.CRLF 結束。
8.當檢測多行回應時,客戶檢測以確認此行是否以結束字符開始。如果是的,而且其的字符不是CRLF,此行的第一個字符(結束字符)將被拋棄;如果其緊跟CRLF,從POP服務器來的回應終止,包括.CRLF 的行也不被認為是多行回應的一部分了。
一、基礎的POP3命令:
二、可選的POP3命令:
三、POP3 回應:
1.POP3回應由一個狀態碼和一個可能跟有附加信息的命令組成。
2.所有回應也是由 CRLF 結束。
3.有兩種狀態碼,"成功" ("+OK") 和 "失敗" ("-ERR")。
4.對特定命令的回應是由許多字符組成的。
5.除了STAT,LIST和UIDL的回應外,其它命令的回應均為"+OK"和 "-ERR"。
參考文件 http://www.ietf.org/rfc/rfc1939.txt
1.POP3伺服器偵聽 TCP 埠口 110。
2.當客戶主機需要使用服務時,它將與伺服器建立TCP連接。
3.當連接建立,POP3發送確認消息。客戶和POP3服務器相互(分別)交換命令和回應,這一過程一直要持續到連接終止。
POP3伺服器和客戶端的運作
1.在生命周期中,POP3會話有幾個不同的狀態(確認、操作及更新)。
2.一旦TCP連接被打開,而且POP3服務器發送了確認信息,此過程就進入了"確認"狀態。在此狀態中,客戶必須向POP3服務器確認自己是其的客戶。一旦確認成功,服務器就獲取與客戶郵件相關的資源,此時這一過程進入了"操作"狀態。在此狀態中,客戶提出服務,當客戶發出QUIT命令時,此過程進入了"更新"狀態。在此狀態中,POP3服務器釋放在"操作"狀態中取得的資源,並發送消息,終止連接。
POP3命令及訊息的交換
1.POP3命令由一個命令和一些參數組成。
2.所有命令以一個CRLF結束。
3.命令和參數由可顯示的ASCII字元組成,由空格間隔。
4.命令一般是三到四個字母,每個參數長度可達40個字元長度。
5.在發送第一行回應和一個CRLF之後,任何的附加信息行發送也由CRLF結束。
6.當所有信息發送結束時,發送最一行,包括一個結束字符(十進制碼46,也就是".")和一個CRLF。
7.如果信息中的任何一行以結束字符開始,此行就是通過在那一行預先裝入結束而進行字符填充的。因此,多行回應由五個CRLF.CRLF 結束。
8.當檢測多行回應時,客戶檢測以確認此行是否以結束字符開始。如果是的,而且其的字符不是CRLF,此行的第一個字符(結束字符)將被拋棄;如果其緊跟CRLF,從POP服務器來的回應終止,包括.CRLF 的行也不被認為是多行回應的一部分了。
一、基礎的POP3命令:
指令名稱 | 說明 | 狀態 |
USER name | 送出帳號名稱 | 確認 |
PASS string | 送出帳號密碼 | 確認 |
QUIT | 結束POP3連線作業 | 確認、操作、更新 |
STAT | 傳回信件狀況 | 操作 |
LIST [msg] | 列出信件大小 【參數】信件編號 | 操作 |
RETR msg | 傳回信件內容 【參數】信件編號 | 操作 |
DELE msg | 刪除指定信件 【參數】信件編號 | 操作 |
NOOP | NOOP | 操作 |
RSET | 重設信件狀態 | 操作 |
二、可選的POP3命令:
指令名稱 | 說明 | 狀態 |
APOP name digest | 使用 name digit md5 方式取代 USER/PASS 方式作確認 【參數】指定郵箱的字串和MD5摘要串。 | 確認 |
TOP msg n | 傳回信件指定行數的內容 【參數】一個是未被標記為刪除的信件數,另一個是非負數(必須提供),如果要求的行數比信件體中的行數大,會發送整個信件。 | 操作 |
UIDL [msg] | 傳回信件序號 【參數】信件數(可選)。如果給出信件數,不包括被標記為刪除的信件。 | 操作 |
三、POP3 回應:
1.POP3回應由一個狀態碼和一個可能跟有附加信息的命令組成。
2.所有回應也是由 CRLF 結束。
3.有兩種狀態碼,"成功" ("+OK") 和 "失敗" ("-ERR")。
4.對特定命令的回應是由許多字符組成的。
5.除了STAT,LIST和UIDL的回應外,其它命令的回應均為"+OK"和 "-ERR"。
參考文件 http://www.ietf.org/rfc/rfc1939.txt
2009年4月1日 星期三
訂閱:
文章 (Atom)