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);
何が残されていますか?
PHPをApacheモジュールとして使用する場合、Apache設定ファイル(httpd.confなど)と.htaccessファイルの指示文を使用して設定を変更することができます。 許可するには、 "AllowOverride Options"または "AllowOverride All"特権が必要です。
これをチェックして
http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess
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.');
}
}
お役に立てれば。