如何在php中获得有用的错误消息?

egmofgnx  于 2021-06-19  发布在  Mysql
关注(0)|答案(17)|浏览(331)

我经常会尝试运行一个php脚本,然后返回一个空白屏幕。无错误信息;只是一个空屏幕。原因可能是一个简单的语法错误(括号错误,缺少分号),或者函数调用失败,或者完全是其他原因。
很难找出哪里出了问题。最后我注解掉代码,到处输入“echo”语句等等,试图缩小问题的范围。但肯定有更好的办法,对吧?
有没有办法让php像java那样生成有用的错误消息?

ndasle7k

ndasle7k16#

可以在要调试的文件中包含以下行:

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

这会覆盖php.ini中的默认设置,这只会使php向日志报告错误。

jvidinwx

jvidinwx17#

不知道这是否有帮助,但这里是我的php项目标准配置文件的一部分。我倾向于不太依赖apache配置,即使是在我自己的服务器上。
我从来没有消失错误的问题,所以也许这里的一些东西会给你一个想法。
编辑以显示应用程序

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.

* /

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}

/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.

* /

error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}

相关问题