2010-04-16 29 views
1

我想獲得這樣的Twitter更新:PHP/Zend:如何強制瀏覽器在特定情況下不在網頁上顯示警告?

try { 

    $doc = new DOMDocument(); 
    $doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss'); 
    $isOK = true; 

} catch(Zend_Exception $e) { 
    $isOK = false; 
} 

如果沒有與互聯網連接的問題,那麼$ ISOK = TRUE;已設置。但是,如果在加載twitter頁面時出現問題,則會顯示以下警告,並且不會設置$ isOK = false;

警告:DOMDocument :: load(http://twitter.com/statuses/user_timeline/1234567890.rss)[domdocument.load]:無法打開流:HTTP請求失敗! HTTP/1.1 404找不到在/var/www/vcred/application/controllers/IndexController.php在線120

我不希望在任何情況下在我的網頁上看到上述警告。任何想法?

感謝

+1

不是ZF相關的,是嗎?您正在使用DOM,而不是Zend_Service_Twitter。 – Gordon 2010-04-16 07:34:47

+0

我在控制器/操作中使用DOM,因此我認爲zend try-catch可能存在問題。 – NAVEED 2010-04-16 07:39:40

+0

try/catch對ZF來說不是特別的。參見http://de2.php.net/manual/en/language.exceptions.php。你得到警告是因爲:*如果一個空字符串作爲文件名被傳遞或者一個空文件被命名,將會產生警告。此警告不是由libxml生成的,並且不能使用libxml的錯誤處理函數來處理。 - http://de2.php.net/manual/en/domdocument.load.php* – Gordon 2010-04-16 07:45:04

回答

7

有幾個選項:

Suppress all errors for just this function call

@$doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss'); 

這是一樣的

$oldLevel = error_reporting(0); 
$doc->load('http://twitter.com/statuses/user_timeline/1234567890.rss'); 
error_reporting($oldLevel); 

抑制誤差這樣一般都不贊成,因爲它使代碼更難調試。像Shrapnel指出的那樣,你想禁止公開顯示生產系統上的所有錯誤消息。在開發系統上,我們鼓勵您使用error_reporting(-1);,這將啓用E_ALLE_STRICT

如果你想使用try/catch,您還可以更改默認error handling並通過這樣做

function myErrorHandler($errno, $errstr, $errfile, $errline) { 
    throw new Exception($errstr, $errno); 
} 
set_error_handler("myErrorHandler"); 

這是雖然全球變化和影響一切提出將所有的錯誤例外。您還需要在代碼中使用catch(Exception $e)而不是Zend_Exception,但它可以工作。請注意,上述內容會轉換所有內容,甚至聲明,因此如果您稍後嘗試訪問此內容,您還將得到一個關於$isOk未定義的例外。隨意根據自己的喜好調整處理程序,並查看user comments for set_error_handler for more refined versions

另一個全球變化是將application.ini更改爲應用程序文件夾,例如,讓Zend Framework控制錯誤處理:

phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

將這些更改爲您的需要。它們與PHP.ini中的相同,例如,

display_errors

這確定錯誤是否應打印在屏幕上作爲輸出的一部分,或者他們是否應該從用戶隱藏。

display_startup_errors

即使display_errors設置爲上,不顯示PHP的啓動過程中發生的錯誤。強烈建議關閉display_startup_errors,除了調試。

+0

+1瞭解詳細信息。 – NAVEED 2010-04-16 09:22:24

+0

@Gordon如何添加你的答案給我的好處!? ;)Howewer ...你忘了寫關於'ini_set',.htaccess和重新編譯PHP的默認錯誤報告級別的源代碼更改;} – takeshin 2010-04-16 10:54:52

+0

@takeshin謝謝。我不認爲我們可以收到答案。彈片已經提到'ini_set',所以我沒有。沒有用重複別人說的話,除非它包含新的imho。另外,我的答案通常不打算涵蓋每一種可能的解決方案。留下一些空間作爲其他答案:) – Gordon 2010-04-16 11:23:51

2
ini_set('display_errors',0); 

應該設置任何生產現場這種方式。
用戶不應該被允許看到系統錯誤信息所有

+0

感謝它爲我工作..是的這段代碼是爲了避免單頁錯誤或通知或警告,但將此代碼放入控制器。 :) – 2016-02-26 12:11:22

相關問題