php強制顯示錯誤 - php顯示錯誤




我如何獲得PHP錯誤顯示? (16)

我檢查了我的PHP ini文件,顯示錯誤已設置,錯誤報告也是E_ALL 。 我重新啟動了我的Apache Web服務器。

我甚至將這些行放在腳本的頂部,它甚至不會捕獲簡單的解析錯誤。 例如,我用"$"聲明變量並且不關閉語句";" 。 但是我的所有腳本都顯示了這些錯誤的空白頁面,但我希望在瀏覽器輸出中看到錯誤

error_reporting(E_ALL);
ini_set('display_errors', 1);

剩下的事情是什麼?


一些虛擬主機提供商允許您在.htaccess文件中更改PHP參數。

您可以添加以下行:

php_value display_errors 1

我的問題與您的問題相同,並且此解決方案修復了此問題。


你可以做如下的事情:

在主索引文件中設置下面的參數

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);

然後根據您的要求,您可以選擇要顯示的內容:

對於所有錯誤,警告和通知

    error_reporting(E_ALL); OR error_reporting(-1);

針對所有錯誤

    error_reporting(E_ERROR);

適用於所有警告

    error_reporting(E_WARNING);

所有通知

    error_reporting(E_NOTICE);

更多信息請here


在PHP文件所在的文件夾中創建一個名為php.ini的文件。

在php.ini中添加下面的代碼(我給出了一個顯示代碼的簡單錯誤):

display_errors = on

display_startup_errors = on

在你的index.php中設置它

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

在運行時啟用錯誤輸出時,您無法捕獲分析錯誤,因為它在實際執行任何操作之前解析文件(並且由於在此期間遇到錯誤,它不會執行任何操作)。 您需要更改實際的服務器配置,以便啟用display_errors並使用適當的error_reporting級別。 如果您無權訪問php.ini,則可以使用.htaccess或類似的文件,具體取決於服務器。

這個問題可能會提供更多信息。


如果你以某種方式發現自己處於無法通過php.ini.htaccess修改設置的情況,那麼當您的PHP腳本包含分析錯誤時,您顯示錯誤的運氣不是很好。 然後,您必須解決在命令行中刪除文件的問題,如下所示:

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

如果您的主機如此鎖定以至於不允許通過php.ini.htaccess更改該值,則它也可能不允許通過ini_set更改該值。 你可以用下面的PHP腳本檢查:

<?php
if( !ini_set( 'display_errors', 1 ) ) {
  echo "display_errors cannot be set.";
} else {
  echo "changing display_errors via script is possible.";
}

如果您安裝了xdebug,則可以通過設置覆蓋每個設置:

xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;

force_display_errors

類型:int,默認值:0,在Xdebug> = 2.3中引入如果此設置設置為1,則無論PHP的display_errors設置如何,都會顯示錯誤。

force_error_reporting

類型:int,默認值:0,在Xdebug> = 2.3中引入此設置是一個位掩碼,如error_reporting。 該位掩碼將與error_reporting表示的位掩碼進行邏輯“或”運算以識別應顯示哪些錯誤。 此設置只能在php.ini中進行,無論應用程序使用ini_set()如何,都可以強制顯示某些錯誤。


如果是快速調試,您可以使用的最佳/簡單/快速解決方案是將您的代碼與捕獲異常進行包圍。 當我想在生產中快速檢查某些內容時,這就是我正在做的事情。

try {

//Page code

} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

我希望這有幫助。


您可以添加自己的自定義錯誤處理程序,它可以提供額外的調試信息。 此外,您可以將其設置為通過電子郵件發送給您。

function ERR_HANDLER($errno ,$errstr, $errfile, $errline){
    $msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br>
    <b>File:</b> $errfile <br>
    <b>Line:</b> $errline <br>
    <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";

    echo $msg;

    return false;
}

function EXC_HANDLER($exception){
    ERR_HANDLER(0,$exception->getMessage(),$exception->getFile(),$exception->getLine());
}

function shutDownFunction() {
    $error = error_get_last();
    if ($error["type"] == 1) {
        ERR_HANDLER($error["type"],$error["message"],$error["file"],$error["line"]);
    }
}

set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutdownFunction");
set_exception_handler("EXC_HANDLER");

您可能會發現“錯誤報告”或“顯示錯誤”的所有設置似乎無法在PHP 7中使用。這是因為錯誤處理已更改。 試試這個:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

或者,一次性捕獲異常和錯誤(這不會與PHP 5向後兼容):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

正如我們現在運行PHP7,這裡給出的答案不再正確。 唯一還算可以的就是Frank Forte,他談到了PHP7。 另一方面,不是試圖用try / catch來捕捉錯誤,而是使用一個技巧:use include。 這裡有3段代碼:

文件:tst1.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// Missing " and ;
echo "Testing
?>  

在PHP7中運行它將不會顯示任何內容

現在,試試這個:

文件:tst2.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
include ("tst3.php");
?> 

文件:tst3.php

<?php
// Missing " and ;
echo "Testing
?>  

現在運行tst2設置錯誤報告,然後包括tst3。 你會看見:

第4行的語法錯誤:語法錯誤,文件意外結束,預期變量(T_VARIABLE)或$ {(T_DOLLAR_OPEN_CURLY_BRACES)或{$(T_CURLY_OPEN)tst3.php中的{



這將工作:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>

這對我來說總是有效的:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

但是,這並不會導致PHP顯示解析錯誤 - 顯示這些錯誤的唯一方法是使用以下行修改您的php.ini:

display_errors = on

這是一個PHP腳本:

<?php
    ini_set("display_startup_errors", 1);
    ini_set("display_errors", 1);

    /* Reports for either E_ERROR | E_WARNING | E_NOTICE  | Any Error*/
    error_reporting(E_ALL);

    echo(abc); /* Notice: abc is an undefined constant */
?>

有關PHP錯誤的更詳細說明,請訪問PHP錯誤 - error_reporting()


頂部的這個代碼應該工作error_reporting(E_ALL);

然而,嘗試在文件中編輯手機上的代碼

error_reporting = on





error-reporting