šŸ¶
PHP

Displaying PHP Errors and Warnings

By Filip on 10/04/2024

Learn how to configure your PHP environment to display all errors and warnings, helping you debug and troubleshoot your code effectively.

Displaying PHP Errors and Warnings

Table of Contents

Introduction

Debugging is crucial in software development, and PHP, being a popular web scripting language, is no exception. While developing your PHP applications, it's essential to have full visibility into errors and warnings to identify and fix issues effectively. This article provides a concise guide on how to reveal all PHP errors and warnings in your application, empowering you to debug with ease.

Step-by-Step Guide

To reveal all PHP errors and warnings in your application, follow these steps:

  1. Enable Error Reporting in Your PHP Script:

    • Use the error_reporting() function at the top of your PHP file.
    • To display all errors, warnings, and notices, use:
      error_reporting(E_ALL);
  2. Turn on Error Display:

    • Enable the display of errors directly on the webpage using ini_set():
      ini_set('display_errors', 1);
  3. Display Startup Errors (if needed):

    • For errors that occur during PHP's startup sequence, enable display_startup_errors:
      ini_set('display_startup_errors', 1);

Example:

<?php
  error_reporting(E_ALL);
  ini_set('display_errors', 1);
  ini_set('display_startup_errors', 1);

  // Your PHP code here
?>

Important Considerations:

  • Production Environments: It's generally considered bad practice to display errors directly on live websites. Instead, log errors to a file for debugging.
  • Configuration Files: You can also set these directives in your php.ini file for server-wide changes. However, modifying php.ini often requires server restart and may not be feasible in shared hosting environments.
  • Framework/CMS Specific Settings: Content Management Systems (CMS) like WordPress may have their own debugging settings. Refer to their documentation for enabling debug mode.
  • Error Log: Regularly check your server's error log (error.log or similar) for detailed error messages, even if they aren't displayed on the webpage.

Code Example

The PHP code configures error handling settings to display all errors, warnings, and notices in the browser, including errors during PHP startup. It then includes example code that would trigger a division by zero error and an undefined offset error.

<?php
  // Enable display of ALL errors, warnings and notices
  error_reporting(E_ALL);

  // Turn on error display in the browser
  ini_set('display_errors', 1);

  // Display errors that occur during PHP's startup sequence
  ini_set('display_startup_errors', 1);

  // Example code with potential errors:
  $result = 10 / 0; // Division by zero error

  $my_array = ['a', 'b'];
  echo $my_array[2]; // Undefined offset error

  // More of your PHP code here...
?>

Explanation:

  1. error_reporting(E_ALL);: This line sets the error reporting level to show all types of errors, including:

    • E_ERROR: Fatal runtime errors that halt script execution.
    • E_WARNING: Non-fatal runtime errors (e.g., accessing an undefined variable).
    • E_NOTICE: Runtime notices (e.g., accessing an undefined index in an array).
    • E_DEPRECATED: Warnings about deprecated features.
    • E_STRICT: Strict coding standards violations.
  2. ini_set('display_errors', 1);: This line enables the display of errors directly on the webpage. Setting it to 0 would disable error display in the browser.

  3. ini_set('display_startup_errors', 1);: This line is important for catching errors that occur during PHP's startup process, which might not be caught by the regular error handling.

Remember:

  • Never enable these settings in a production environment! Displaying errors to users can expose sensitive information and create security risks.
  • Use a logging mechanism (like writing errors to a file) for debugging in production.
  • Consult your framework or CMS documentation for their specific debugging recommendations.

Additional Notes

Understanding Error Levels:

  • E_ALL catches everything but can be noisy. For a more focused approach, combine specific error levels using the bitwise OR operator (|):
    error_reporting(E_ERROR | E_WARNING | E_PARSE); 
  • Customize error reporting based on your development stage. Start with E_ALL during initial development and gradually narrow it down as you fix issues.

Beyond Displaying Errors:

  • Logging Errors:
    • Use error_log() to write errors to a custom log file for later analysis.
    • Consider using dedicated error logging libraries like Monolog for more advanced features.
  • Error Handlers:
    • Implement custom error handling functions using set_error_handler() to control how errors are displayed or logged.
  • Exception Handling:
    • For more structured error management, use PHP's exception handling mechanism (try, catch, finally) to gracefully handle exceptions.

Security Best Practices:

  • Disable display_errors and display_startup_errors in production.
  • Never expose detailed error messages to users in a live environment. This could reveal sensitive information about your server configuration or application logic.
  • Use a generic error page for user-facing errors. This provides a better user experience and prevents information leakage.

Additional Tips:

  • Use a code editor or IDE with built-in debugging tools. These tools often provide more informative error messages and debugging capabilities.
  • Utilize browser developer tools (like the console) to inspect network requests, JavaScript errors, and other debugging information.
  • Consider using a PHP linter or static analysis tool to identify potential errors and code style violations early in the development process.

Summary

Setting Description How to Enable Notes
Error Reporting Level Controls which types of errors are reported. error_reporting(E_ALL); Use E_ALL to display all errors, warnings, and notices.
Error Display Enables/disables showing errors directly on the webpage. ini_set('display_errors', 1); Disable in production!
Startup Error Display Shows errors that occur during PHP's startup sequence. ini_set('display_startup_errors', 1); Useful for debugging configuration issues.

Important:

  • Production Environments: Log errors to a file instead of displaying them on the website.
  • Configuration Options: You can set these directives in php.ini for server-wide changes.
  • Framework/CMS Settings: Refer to your framework/CMS documentation for specific debugging settings.
  • Error Log: Regularly check your server's error log for detailed error messages.

Conclusion

By enabling these settings, you can gain valuable insights into the inner workings of your PHP code and effectively identify and resolve errors during the development process. However, always remember to disable these settings in production environments and implement robust error logging and handling mechanisms to prevent sensitive information from being exposed to end-users. Secure coding practices and a thorough understanding of error handling are essential for developing reliable and secure PHP applications.

References

  • How to Display All PHP Errors: A Detailed Guide - Stackify How to Display All PHP Errors: A Detailed Guide - Stackify | Being able to see what went wrong is vital during troubleshooting. Learn how to enable show all PHP errors and warnings in your app.
  • How do I get PHP errors to display? - Stack Overflow How do I get PHP errors to display? - Stack Overflow | Jun 27, 2009 ... Then based on your requirement you can choose which you want to show: For all errors, warnings and notices: error_reporting(E_ALL); ORĀ ...
  • error_reporting - Manual - PHP error_reporting - Manual - PHP | PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.
  • What is the Quickest Way to Show All PHP Errors | Rollbar What is the Quickest Way to Show All PHP Errors | Rollbar | Viewing PHP errors is critical for developers to troubleshoot an application. Learn how to show all PHP errors and warning notifications.
  • How to show All Errors in PHP ? - GeeksforGeeks How to show All Errors in PHP ? - GeeksforGeeks | A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
  • How to Display All PHP Errors: For Basic and Advanced Use How to Display All PHP Errors: For Basic and Advanced Use | During the execution of a PHP application, it is possible for it to generate a wide range of warnings and errors. We'll go through all of the different ways to activate PHP errors and warnings in this tutorial.
  • Show all errors and warnings in project for all PHP files, not just ... Show all errors and warnings in project for all PHP files, not just ... | We do see all errors and warnings in the "problems" tab when we open a PHP file with errors, but they are removed from the problems tab when we close the file. It would be great to be able to see a...
  • Warnings and Errors in Local - Local Warnings and Errors in Local - Local | Are you wondering why a site that is working perfectly on a remote server is suddenly looking very broken when you import it into Local? Because Local is meant to be a development environmentā€¦
  • Display all php errors and notices, etc - Support - Local Community Display all php errors and notices, etc - Support - Local Community | Iā€™d like to show all errors on a site, including notices, while developing. Iā€™ve seen some past answers to this question, but Iā€™ve not been able to get it to work (e.g. Iā€™ve added various combinations of this to the wp-config file): ini_set(ā€˜display_errorsā€™, ā€˜1ā€™); ini_set(ā€˜display_startup_errorsā€™, ā€˜1ā€™); define( ā€˜WP_DEBUGā€™, true ); define( ā€˜WP_DEBUG_LOGā€™, true ); define( ā€˜WP_DEBUG_DISPLAYā€™, true ); Is there something Iā€™m doing wrong, or does this no longer work with the current version of ...

Were You Able to Follow the Instructions?

šŸ˜Love it!
šŸ˜ŠYes
šŸ˜Meh-gical
šŸ˜žNo
šŸ¤®Clickbait