2014-02-07 28 views
3

有沒有什麼辦法可以告訴PHP不顯示錯誤,警告或通知消息中有任何錯誤的文件的完整路徑。我知道我可以禁用錯誤;但是,只是爲了避免任何風險。PHP - 停止顯示錯誤的完整路徑

例如:我的腳本返回時顯示如下錯誤:

Fatal error: Call to undefined function shell_exec1() in /home/[user]/public_html/index.php on line 1

我要像

Fatal error: Call to undefined function shell_exec1() in ~/index.php on line 1

顯示它這樣,這將是更安全的方法以顯示錯誤消息,而不暴露文件的完整路徑給壞人。

這可能嗎?怎麼樣?

+0

在生產中,最好禁用錯誤報告。你需要做的是爲你的代碼引入異常處理。 – LifeQuery

+0

如果你的問題最少,顯示錯誤已經給惡意用戶足夠的信息,可能利用你的代碼顯示路徑。 我會建議你在生產服務器中壓縮錯誤,並將它們記錄到文件中並定期檢查。 –

+0

@LifeQuery不,您應該只禁用技術錯誤顯示並仍然記錄錯誤以供審閱。 – Gumbo

回答

2

只需編寫您自己的錯誤處理程序。參見:http://www.php.net/manual/en/function.set-error-handler.php

function myErrorHandler($errno, $errstr, $errfile, $errline) { 
    if (!(error_reporting() & $errno)) { 
     // This error code is not included in error_reporting 
     return; 
    } 

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

    case E_USER_WARNING: 
     echo "<b>My WARNING</b> [$errno] $errstr<br />\n"; 
     break; 

    case E_USER_NOTICE: 
     echo "<b>My NOTICE</b> [$errno] $errstr<br />\n"; 
     break; 

    default: 
     echo "Unknown error type: [$errno] $errstr<br />\n"; 
     break; 
    } 

    /* Don't execute PHP internal error handler */ 
    return true; 
} 

set_error_handler("myErrorHandler");