set_error_handle 和 at(@)符號的有關問題

來源:互聯網
上載者:User
set_error_handle 和 at(@)符號的問題
問題是這樣的,我用set_error_handle 將一些系統錯誤或者警告資訊寫入到記錄檔中。
但是對於一些api 比如fopen之類的,如果檔案不存在的情況下也會跑到 自己寫的錯誤處理函數中,[email protected],對諸如此類問題不進行顯示。
[email protected]功能去掉。怎麼做啊?
謝謝大俠們了


------解決方案--------------------
用try catch捕獲
------解決方案--------------------
可以去掉,使用set_error_handler你只需要注意兩點:
1.set_error_handler只會捕獲error_reporting裡定義的錯誤類型,這個可以在php.ini裡配置,也可以使用函數設定;
2.自訂的錯誤處理函數傳回值如果為false,則會觸發php的預設錯誤處理。而傳回值為true則不會觸發php預設的錯誤處理,則看不到那個討厭的報錯了。

至於寫法你可以參考一下。
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
//如果這個錯誤類型沒有包含在error_reporting裡
return;
}

switch ($errno) {
case E_USER_ERROR:
echo " My ERROR [$errno] $errstr
\n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
\n";
echo "Aborting...
\n";
exit(1);
break;

case E_USER_WARNING:
echo " My WARNING [$errno] $errstr
\n";
break;

case E_USER_NOTICE:
echo " My NOTICE [$errno] $errstr
\n";
break;
default:
echo "Unknown error type: [$errno] $errstr
\n";
break;
}
//返回false則會觸發php的預設錯誤處理,反回true則只用自訂函數處理。
return true;
}
set_error_handler('myErrorHandler');
fopen('/tmp/foo', 'r');
------解決方案--------------------
經測試,#5的代碼可以滿足你的要求!
執行後,若
fopen('/tmp/foo', 'r');
失敗,則顯示
Unknown error type: [2] fopen(/tmp/foo) [function.fopen]: failed to open stream: No such file or directory


@fopen('/tmp/foo', 'r');
失敗,則無任何顯示
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.