web-dev-qa-db-ja.com

どうやって入手できますか PHP 表示するエラー?

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

私はこれらの行を私のスクリプトの一番上に置くことさえしました、そしてそれは単純なパースエラーさえ捕まえません。たとえば、変数を"$"で宣言し、statements";"を閉じません。しかし、私のスクリプトはすべてこれらのエラーについて空白のページを表示しますが、私は実際にはブラウザの出力に errors を表示したいと思います。

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

やるべきことは何ですか?

1547
Abs

これはいつも私のために働きます:

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

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

display_errors = on
2949
Fancy John

実行時にエラー出力を有効にすると、解析エラーをキャッチすることはできません。なぜなら、実際に何かを実行する前にファイルを解析するからです(そしてこの間にエラーが発生するので、何も実行しません)。 display_errorsがオンになり、適切なerror_reportingレベルが使用されるように、実際のサーバー構成を変更する必要があります。 php.iniにアクセスできない場合は、サーバーによっては.htaccessなどを使用できる場合があります。

この質問 は追加情報を提供するかもしれません。

144
Michael Madsen

php.ini の中に:

display_errors = on

その後、Webサーバーを再起動してください。

130
user1803477

すべてのエラーを表示するには、次を行う必要があります。

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

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

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

—または—

2.(b)display_errors = Onphp.iniを設定します

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

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

php -l index.php

別のPHPスクリプトからスクリプトをインクルードincludeした場合、それはwillincludedスクリプトの構文エラーを表示します。例えば:

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
93
andre

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

次の行を追加することができます。

php_value display_errors 1

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

43
Kalhua

「エラー報告」または「エラー表示」の設定がすべて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'];
}
34
Frank Forte

これは動作します:

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

つかいます:

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

これはそれを書くための最良の方法ですが、構文エラーは空白の出力を与えるので、構文エラーをチェックするためにコンソールを使用してください。 PHPコードをデバッグする最善の方法は、コンソールを使用することです。以下を実行してください。

php -l phpfilename.php
28
Abhijit Jagtap

あなたの index.php ファイルにこれを設定してください:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
18
Sumit Gupta

PHPファイルが存在するフォルダーに php.ini というファイルを作成します。

Php.iniの中に次のコードを追加します(私はコードを示す簡単なエラーを出しています):

display_errors = on

display_startup_errors = on
16
NavyaKumar

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

14

上記のすべての回答に従っているにもかかわらず(または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 {
    ...
}
12
jxmallett

ApacheモジュールとしてPHPを使用する場合、Apache設定ファイル(例:httpd.conf)と.htaccessファイルのディレクティブを使用して設定を変更できます。そのためには、「AllowOverride Options」または「AllowOverride All」権限が必要です。

これをチェックして

http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess

11
mike

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.";
}
10
chiborg

私たちは今PHP 7を実行しているので、ここで与えられた答えはもう正しくありません。それでもまだ唯一のものは Frank 7からのもの です。彼はPHP 7について話しています。

反対に、try/catchでエラーを捕らえるのではなく、トリックを使うことができます:includeを使います。

これが3つのコードです。

ファイル:tst1.php

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

これをPHP 7で実行しても何も表示されません。

今、これを試してみてください。

ファイル: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行目のtst3.phpに構文エラー、予期しないファイルの終わり、変数(T_VARIABLE)、または$ {(T_DOLLAR_OPEN_CURLY_BRACES)または{$(T_CURLY_OPEN)が必要です

10
Peter

以下のようなことができます。

メインインデックスファイルに以下のパラメータを設定します。

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

それからあなたの要求に基づいてあなたはあなたが見せたいものを選ぶことができます:

all のエラー、警告、および通知

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

all errorsの場合:

    error_reporting(E_ERROR);

all warningsの場合:

    error_reporting(E_WARNING);

all の場合

    error_reporting(E_NOTICE);

詳細については、 ここ を確認してください。

10
Binit Ghetiya

私のプレーンな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 = 'Production URL'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

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

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

function ERR_HANDLER($errno, $errstr, $errfile, $errline){
    $msg = "<b>Something 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");
8
lintabá

上のコードはうまくいくはずです。

error_reporting(E_ALL);

ただし、ファイル内の電話機のコードを編集してみます。

error_reporting =on
4
Wembo Mulumba

迅速なデバッグの場合に使用できる最善の/簡単な/速い解決策は、例外をキャッチしてコードを囲むことです。プロダクションで何かを早くチェックしたいときは、それが私のやり方です。

try {
    // Page code
}
catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
4
Xakiru

書くだけ:

error_reporting(-1);
2
jewelhuq

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

error_reporting = E_ALL
display_errors = On
2
Salam
<?php
// Turn off error reporting
error_reporting(0);

// Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Report all errors
error_reporting(E_ALL);

// Same as error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
?

>

あなたのサイトが稼働している間は、セキュリティ上の理由からphp.iniファイルでdisplay_errorsを無効にする必要があります。ただし、開発環境では、display_errorsをトラブルシューティング用に有効にすることができます。

2
pardeep

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()で何をしても、特定のエラーが表示されるのを強制することができます。

1
Peter Haberkorn

あなたはこのコードを使いたくなるかもしれません:

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

これを行うには、PHP.iniファイルを変更して次の行を追加します。

display_errors = on
display_startup_errors = on

これは私のためにいつも働くのでまたはあなたはまた、次のコードを使用することができます

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);**strong text**

Phpスクリプトのphp.iniおよびini_set()関数以外に、以下に示す.htaccessおよびhttpd.confディレクティブを使用して同じことを行うことができます。一部のホスティングプロバイダーでは、.htaccessおよびhttpd.confを使用してphp設定を許可しています。

#PHPエラーを隠す

php_flag display_startup_errors ON

php_flag display_errors ON

php_flag html_errors ON

php_flag log_errors on

php_flag ignore_repeated_errors off

php_flag ignore_repeated_source off

php_flag report_memleaksオン

php_flag track_errors on

php_value docref_root 0

php_value docref_ext 0

php_value error_log /home/path/public_html/domain/PHP_errors.log

php_value error_reporting 999999999

php_value error_reporting -1

php_value log_errors_max_len 0

注文許可、拒否

すべてから拒否

すべて満足

0
mohitesachin217