How can I get useful error messages in PHP? How can I get useful error messages in PHP? php php

How can I get useful error messages in PHP?


For syntax errors, you need to enable error display in the php.ini. By default these are turned off because you don't want a "customer" seeing the error messages. Check this page in the PHP documentation for information on the 2 directives: error_reporting and display_errors. display_errors is probably the one you want to change. If you can't modify the php.ini, you can also add the following lines to an .htaccess file:

php_flag  display_errors        onphp_value error_reporting       2039

You may want to consider using the value of E_ALL (as mentioned by Gumbo) for your version of PHP for error_reporting to get all of the errors. more info

3 other items: (1) You can check the error log file as it will have all of the errors (unless logging has been disabled). (2) Adding the following 2 lines will help you debug errors that are not syntax errors:

error_reporting(-1);ini_set('display_errors', 'On');

(3) Another option is to use an editor that checks for errors when you type, such as PhpEd. PhpEd also comes with a debugger which can provide more detailed information. (The PhpEd debugger is very similar to xdebug and integrates directly into the editor so you use 1 program to do everything.)

Cartman's link is also very good: http://www.ibm.com/developerworks/library/os-debug/


The following code should display all errors:

<?php// ----------------------------------------------------------------------------------------------------// - Display Errors// ----------------------------------------------------------------------------------------------------ini_set('display_errors', 'On');ini_set('html_errors', 0);// ----------------------------------------------------------------------------------------------------// - Error Reporting// ----------------------------------------------------------------------------------------------------error_reporting(-1);// ----------------------------------------------------------------------------------------------------// - Shutdown Handler// ----------------------------------------------------------------------------------------------------function ShutdownHandler(){    if(@is_array($error = @error_get_last()))    {        return(@call_user_func_array('ErrorHandler', $error));    };    return(TRUE);};register_shutdown_function('ShutdownHandler');// ----------------------------------------------------------------------------------------------------// - Error Handler// ----------------------------------------------------------------------------------------------------function ErrorHandler($type, $message, $file, $line){    $_ERRORS = Array(        0x0001 => 'E_ERROR',        0x0002 => 'E_WARNING',        0x0004 => 'E_PARSE',        0x0008 => 'E_NOTICE',        0x0010 => 'E_CORE_ERROR',        0x0020 => 'E_CORE_WARNING',        0x0040 => 'E_COMPILE_ERROR',        0x0080 => 'E_COMPILE_WARNING',        0x0100 => 'E_USER_ERROR',        0x0200 => 'E_USER_WARNING',        0x0400 => 'E_USER_NOTICE',        0x0800 => 'E_STRICT',        0x1000 => 'E_RECOVERABLE_ERROR',        0x2000 => 'E_DEPRECATED',        0x4000 => 'E_USER_DEPRECATED'    );    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))    {        $name = 'E_UNKNOWN';    };    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));};$old_error_handler = set_error_handler("ErrorHandler");// other php code?>

The only way to generate a blank page with this code is when you have a error in the shutdown handler. I copied and pasted this from my own cms without testing it, but I am sure it works.