web-dev-qa-db-ja.com

PHPエラーを表示するには?

したがって、現在のWebページには実際にはエラーはありませんが、HTTP 500エラーページの代わりに、ポップアップ時にエラーを表示できるようにしたいのです。私は少しグーグルで検索し、これらの2行を追加するとすべてが修正されると考えました。

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

注:学校のアカウントのサーバーを使用しているため、php.iniファイルにアクセスできません。

そこで、ページの上部にそのようなバグ($ buggyの後にセミコロンなし)を導入しました。

<?php 
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$buggy

$x = 4 + 2;
...

ただし、サーバーエラーが表示されるだけです。

「Webサイトで http://mywebpage.com/ の取得中にエラーが発生しました。メンテナンスのためにダウンしているか、正しく設定されていない可能性があります。」

何か案は?

編集:

コードを再構成しました:

<?php 
include_once 'database/errorSettings.php';
?>
<?php 

$buggy // whoops
$x = 4 + 2;
...

errorSettings.phpは次のとおりです。

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

しかし、それはまだ機能しません...再構成する間違った方法?

33
user114518

あなたが持っているのは解析エラーです。これらは、コードが実行される前にスローされます。 PHPファイル内のコードを実行する前に、ファイル全体を解析する必要があります。エラーレベルを設定しているファイルに解析エラーがある場合、ファイルは解析されません。エラーがスローされるまでに有効になります。

1つのファイルでエラーレベルを設定し、実際のコード(およびエラー)を含む別のファイルをincludeingするなど、ファイルを小さな部分に分割するか、エラーレベルをPHP php.iniまたは.htaccessディレクティブを使用します。

14
deceze

.htaccessファイルにerror_reporting値を設定する必要があります。解析エラーがあるため、PHPコードでerror_reporting()関数を実行することはありません。

.htaccessファイルでこれを試してください(使用できる場合):

php_flag display_errors 1
php_value error_reporting 30719

30719はE_ALLに対応すると思いますが、間違っている可能性があります。

アップデートの編集:http://php.net/manual/en/errorfunc.constants.php

int error_reporting ([ int $level ] )
---
32767   E_ALL (integer)     
All errors and warnings, as supported, except of   level E_STRICT prior to PHP 5.4.0.   32767 in PHP 5.4.x, 30719 in PHP 5.3.x, 6143 in PHP   5.2.x, 2047 previously
13
Nick Clark

上記のdecezeが言ったことに加えて。これは解析エラーです。解析エラーをデバッグするには、debugSyntax.phpという名前のルートに新しいファイルを作成します。これを入れてください:

<?php

///////    SYNTAX ERROR CHECK    ////////////
error_reporting(E_ALL);
ini_set('display_errors','On');

//replace "pageToTest.php" with the file path that you want to test. 
include('pageToTest.php'); 

?>

DebugSyntax.phpページを実行すると、テストすることを選択したページからの解析エラーが表示されます。

5
Matt

PHPファイルの上に次のコードを書くだけです:

ini_set('display_errors','on');
2
Mehul V.

Codeigniterを使用している人(私はC3を使用しています):

Index.phpファイルはphp.ini設定を上書きするため、index.phpファイルの68行目:

case 'development':
        error_reporting(-1);
        ini_set('display_errors', 1);
    break;

このオプションを変更して、必要なものを設定できます。完全なリストは次のとおりです。

1   E_ERROR
2   E_WARNING
4   E_PARSE
8   E_NOTICE
16  E_CORE_ERROR
32  E_CORE_WARNING
64  E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024    E_USER_NOTICE
6143    E_ALL
2048    E_STRICT
4096    E_RECOVERABLE_ERROR

それが役に立てば幸い。

0

構文エラーは外部サーバーでは簡単にチェックされず、実行時エラーだけがチェックされます。

私がやること?あなたと同じように、私は

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

ただし、実行する前に、オンラインのPHP構文チェッカーを使用して、PHPファイルで構文エラーをチェックします。

最高の私見は PHPコードチェッカー

すべてのソースコードをコピーし、メインボックス内に貼り付けて、Analyzeボタンをクリックします。

これは最も実用的な方法ではありませんが、2つの手順は補完的であり、問​​題を完全に解決します

0
Paulo Buchsbaum

PHP5.4およびPlesk 11.5を使用しているときにこの問題が発生しました

どういうわけか、Pleskドメイン設定ページのエラー報告とエラー設定の表示は、.htaccessまたはPHPスクリプトのローカル設定を完全に上書きしていました。これを防ぐ方法は見つかりませんでした。 Plesk設定を使用して、エラー報告のオンとオフを切り替えます。

Php.iniに設定があり、ローカルサイトがこれらの設定を上書きするのを防ぐことができます。おそらく、サーバーで使用されるコントロールパネルによって強制されます。

0
Jason