iniset - php エラー ブラウザ 非 表示




PHPエラーを表示するにはどうしたらいいですか? (16)

PHP7を実行しているので、ここで与えられた答えは正しくありません。 まだOKの唯一の人は、PHP7について語っているFrank Forteのものです。 反対側では、try / catchでエラーをキャッチしようとするのではなく、トリックを使用することができます: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をインクルードします。 あなたが表示されます:

解析エラー:構文エラー、予期しないファイルの終わり、変数(T_VARIABLE)または$ {(T_DOLLAR_OPEN_CURLY_BRACES)または{$(T_CURLY_OPEN)in tst3.php in line 4

私はPHP iniファイルをチェックし、表示エラーが設定されており、エラー報告もE_ALLです。 Apache Webサーバーを再起動しました。

私はスクリプトの一番上にこれらの行を置いていても、簡単な解析エラーをキャッチしません。 たとえば、 "$"変数を宣言し、ステートメントを閉じない";" 。 しかし、すべてのスクリプトはこれらのエラーで空白のページを表示しますが、実際にはブラウザの出力にエラーが表示されます。

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

何が残されていますか?



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で表されるビットマスクと論理的にORされ、どのエラーを表示するかを決定します。 この設定はphp.iniでのみ行うことができ、ini_set()でアプリケーションが何をしていても、特定のエラーを表示させないようにすることができます。


「エラー報告」や「表示エラー」の設定が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'];
}

あなたのindex.phpにこれを設定してください

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

あなたのphp.iniの中で

display_errors = on

次に、Webサーバーを再起動します。


ここに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()を参照してください


これはいつも私のために働く:

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

しかし、これはPHPに解析エラーを表示させるものではありません。これらのエラーを表示する唯一の方法は、php.iniを次の行で変更することです。

display_errors = on

すべてのエラーを表示するには、以下が必要です。

1.ブラウザから呼び出すPHPスクリプトの中にこれらの行をindex.phpます(通常はindex.php )。

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

2.(a)このスクリプトに構文エラーがないことを確認します

- または -

2.(b) php.ini display_errors = Onに設定する

それ以外の場合は、2行も実行できません!

コマンドラインで次のコマンドを実行すると、スクリプトの構文エラーを確認できます。

php -l index.php

別のPHPスクリプトからスクリプトをインクルードすると、 インクルードされたスクリプトに構文エラー表示さます。 例えば:

index.php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser

それが私が学んだことです。 PHP.INIファイル

error_reporting = E_ALL
display_errors = On

クイックデバッグの場合に使用できる最高の/簡単な/高速なソリューションは、例外をキャッチしてコードを囲むことです。 それは私が生産上何かを速く点検したい時にやっていることです。

try {

//Page code

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

私はこれが助けて欲しい。


一部のWebホスティングプロバイダでは、 .htaccessファイルのPHPパラメータを変更できます。

次の行を追加できます。

php_value display_errors 1

私はあなたと同じ問題を抱えていましたが、この解決策はそれを修正しました。


上記のすべての回答に従っている(またはphp.iniファイルを編集できない)にもかかわらずエラーメッセージが表示されない場合は、エラー報告を有効にする新しいPHPファイルを作成し、問題のファイルを含めるようにしてください。 例えば:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');

私のphp.iniファイルですべてが正しく設定されているにもかかわらず、これが名前空間エラーを捕まえる唯一の方法でした。 私の正確なシナリオは:

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}

余分なデバッグ情報を提供できる独自のカスタムエラーハンドラを追加できます。 さらに、電子メールで送信するように設定することもできます。

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");

書くだけ:

error_reporting(-1);

私は通常私のプレーンなPHPプロジェクトで次のコードを使っていますが、プロジェクトが大きくなると私はそれを推奨します。

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT','DEVELOPMENT');
}

$base_url   =   null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url   =   'http://localhost/product/';
            ini_set('display_errors',1);
            ini_set('display_startup_errors',1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url   =   'Prod url'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}

お役に立てれば。





error-reporting