2009-11-05 56 views
1

如何禁用錯誤只是爲了特定的PHP函數,並在同一時間知道錯誤發生?例如,我使用php函數parse_url來解析一個url數組,有時它會返回一個錯誤,我想要做的就是一旦發生錯誤就解析下一個url,而不是在屏幕上顯示它(錯誤)。在PHP中禁用錯誤​​

+0

你能發表一些代碼嗎? – jochil 2009-11-05 16:16:36

回答

2

函數之前的@符號將會壓制錯誤信息,並且parse_url()在錯誤時返回false,所以只需抓住它。

if(@parse_url($url) === false) { 
     //Error has been caught here 
    } 
0

加前綴的函數調用與@,所以使用@parse_url()應隱藏錯誤

+0

要小心使用「@」這會影響腳本的性能。很多 – 2009-11-05 16:21:22

+0

嗯,這很奇怪,從來沒有想過會是這樣。你知道爲什麼嗎? – Wim 2009-11-05 16:25:43

+0

聽起來很可疑,所以我運行了一次基準測試,調用parse_url()一百萬次來查找好的和不好的網址,無論有沒有@。結果: 好網址,沒有@:1.986s 不良URL,沒有@:1.519s 良好的網址,以@:3.612s 不良URL,以@:2.567s 上卸載使用PHP 5.2.5機。所以你可以看到'@'的速度變慢了,但我們每次通話的時間差異在1-2微秒之間。 – Cal 2009-11-05 22:04:04

0

要無記載錯誤的特定語句,只需添加一個@

$file = @file_get_contents($url); 

當,當找不到$網址file_get_contents可以拋出錯誤。

您可以在任何地方使用@符號來沉默任何語句。像:

$i = @(5/0); 
2

@是邪惡的。

您可以使用此:

try { 
    // your code 
} catch (Exception $e) { 
    // a block that executed when the exception is raised 
} 
+1

應該是: } catch(Exception $ e){ 而且它不會捕獲錯誤,只會拋出異常。 – 2009-11-05 16:20:53

+0

固定,對不起:) – silent 2009-11-05 16:22:08

+0

除非標準PHP函數使用異常,否則它們只使用正常錯誤。不過,您可以將這些轉換爲異常,請參閱:http://be.php.net/manual/en/class.errorexception.php – Wim 2009-11-05 16:22:54

1

的最好的辦法是將PHP的「錯誤」的例外,使用這裏列出http://php.net/manual/en/class.errorexception.php的技術再處理異常像你在其他語言中做的那樣:

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 
} 
set_error_handler("exception_error_handler"); 


try { 
    parse_url(...) 
} catch(Exception $e) {