2013-06-11 31 views
0

這裏就是我只想做,如果一個致命的錯誤是在該文件中,我不希望腳本暫停執行是否有可能在包含文件上捕獲致命錯誤php?

try { 
require "somethin.php" 
} catch(...) {} 

會的file_get_contents()eval()一些方法是倒過來

+0

你爲什麼不先試試? – samayo

+3

公平地說,他可能確實嘗試過,哈哈你有沒有發現? –

+0

@DaveChen你說「很可能」,因爲他沒有提供任何提示,不管他是否做。那麼,這裏的行爲是誰呢?嗯。不幸的是,我讀到他噁心的評論。 – samayo

回答

7

注意 - 這並不回答海報的問題。醜陋的現實是你不能從一個致命的錯誤中恢復,但這對其他錯誤有效

require不會引發異常,而是會默認觸發一個錯誤。

要讓PHP拋出異常,你必須註冊一個錯誤異常處理程序。

你可以找到一個例子here

但基本上

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

有了這個戲有可能趕上和處理,你認爲合適的錯誤

+0

我想提一下,在需要之前檢查文件是否可以讀取可能會更好,不是嗎? –

+1

@DaveChen這是一種方法......我更喜歡這個,因爲它只是文件系統上的一個命中 – Orangepill

+1

值得注意的是,這將導致幾乎所有的PHP錯誤都拋出異常(在我看來是一件好事),除了解析時間錯誤 – Orangepill

6

沒有真的沒有理智的方式來捕捉(不可捕捉的;-))在PHP中的致命錯誤。所以也沒有從這個中恢復的理智方法。這是有道理的,因爲這是一個致命的錯誤。

基本上PHP說的是:這是你不能/不應該試圖恢復的東西。

注意,也@Orangepill's solution不會致命錯誤工作:如果你想要做的事,當一個致命的錯誤發生(例如發送電子郵件給你,告訴你這個)http://codepad.org/4nzzYQSG

現在你可能會想調查:https://stackoverflow.com/a/2146171/508666

+0

+1我的解決方案如下,雖然有用甚至不會拋出一些東西給上述例子。 – Orangepill

+0

+1讓我感到自豪。 (儘管我不知道你們在談論什麼:P) – samayo

+0

那麼,做什麼是正確的事情......尼克斯我的答案或只是橫幅頂部的橫幅說明它不回答這個問題? – Orangepill

相關問題