web-dev-qa-db-ja.com

解析エラーは表示されません

PHPで解析エラーを画面に表示したいのですが、代わりに空白のページが表示されます。サーバーのエラーログファイルには何も書き込まれません。

私のセットアップ:PHP5.2.9/IIS 6(Apacheではありません!)。

私のPHP.INI:

error_reporting=E_STRICT
display_errors = On
display_startup_errors = On
log_errors = On
error_log = "C:\Program Files\Zend\ZendServer\logs\php_error.log"

解析エラーまたは致命的なエラーをログに記録するか、画面に表示するにはどうすればよいですか?

ありがとう、テムリ

[〜#〜] update [〜#〜]:さまざまなスイッチで遊んだ後、IIS特定の問題です。アイデアはありますか?

21
temuri

Apacheは、解析エラーを報告することを常に好むわけではありません。コマンドラインから、

php -l <file>

-lスイッチは、PHPにファイル構文をチェックするように指示します。manページを参照してください。

4
Chris Tonkinson

E_STRICTE_ALLに含まれていません(PHP 6まで)。E_STRICTを取得し続けたい場合

Php.iniの場合:

error_reporting = E_ALL | E_STRICT

実行時:

error_reporting( E_ALL | E_STRICT );

構文エラーを確認するには、php.iniでエラー報告レベル(および display_errors )を設定する必要があります。 PHPで構文エラーが発生した場合、ランタイムは実行されないため、ランタイムでの設定は機能しません(display_errorsリンクを参照してください)。

3
James Socol

ターミナルで次のコマンドを使用して、スクリプトの構文を確認できます。

php -l path/to/file.php

個人的には、この行を~/.bash_profileファイルに追加して、現在の作業ディレクトリ内のすべてのファイルでphp -lを簡単に実行できるようにしました。

phpl() { for i in *.php; do php -l $i; done }

あなたが本当にハードコアなら、コマンドラインからアプリを実行することもできます。コンパイル時のエラーが発生する可能性がはるかに高くなりますが、それはちょっとクールです。

$ argv変数を使用して最初の引数$ argv [1]を取得し、それをリクエストとして使用できます。

<?php
// show those errors!
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

// simulate a web server request
$request = '/' . isset($argv[1]) ? ltrim($argv[1], '/') : '/';
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = $request;

次に、コマンドラインからスクリプトを実行できます。これは、次のサイトにアクセスするのと同じです:your-webapp.com/request/uri/here

php /path/to/script.php request/uri/here

これは、コマンドラインからCodeIgniterを実行するためのより包括的な例です。他の多くのフレームワークでも機能するはずです: http://phpstarter.net/2008/12/run-codeigniter-from-the-command-line-ssh/

2
jchook

Rasmus Lerdorfが示唆しているように、開発サーバーでは常にerror_reporting(-1)を使用してください。

1
Vasili Pascal

再:php死死の空白の画面、私はその設定を発見しました

php_value error_reporting "E_ALL"またはphp_valueerror_reporting 8192

私のWindows7の.htaccessでは、Apache2.2.4とphp5.3.13を使用したWampserverが、空白のphpエラー画面を表示する確実な方法です-今日、2014年6月3日。これらのhtaccess行は、phpinfo( )が、エラーの表示は、htaccessで行がコメントアウトされている(使用されていない)場合にのみ発生します。

しかし...次の分私はそれを発見します

php_value error_reporting 8191

Phpinfo()値を設定し、ブラウザにエラーメッセージを表示することもできます! D'oh!それは整数でなければならず、明らかに十分な大きさの整数ではなく、明らかに特定のまたは有効な整数でなければなりません!

0
Ralph Frost

Zend Framework(v1)を使用していて、オートローダーを使用している場合、次のコードは解析エラーが表示されないようにします。

self::$Autoloader->suppressNotFoundWarnings(true);

詳細については、次の回答を参照してください。

Zendフレームワークを使用するとphpエラーが表示されます

0
Travis