Table of Contents
Diagnose Your PHP Code In WordPress: Displaying All PHP Errors (Basic & Advanced)
Have you ever found yourself staring at your PHP code, scratching your head in frustration, trying to figure out why a particular section isn’t working as expected? It’s a scenario that every developer has faced at some point, and it can be incredibly frustrating when you can’t seem to pinpoint the issue. That’s where the art of displaying PHP errors comes into play.
Debugging is an essential part of the development process, and being able to identify and resolve errors efficiently can save you countless hours of headaches. This guide will take you on a journey through the world of PHP errors, equipping you with the knowledge and techniques to effectively display all errors, both basic and advanced.
By uncovering every error, no matter how obscure or seemingly insignificant, you’ll be able to pinpoint issues quickly, streamline your debugging process, and ultimately write cleaner, more robust PHP code. So, let’s dive in and demystify the world of PHP errors together!
Basic Error Displaying:

Display All Errors:
Explanation: PHP has a built-in error reporting system that, by default, may not display all errors.
Implementation: Add the following line at the top of your PHP script to ensure that all errors are displayed: error_reporting(E_ALL);
Benefits: This simple step will reveal errors that might have gone unnoticed, providing valuable insights into the root cause of any issues.
Display Errors on the Webpage:
Explanation: By default, PHP errors are often logged in server logs or reported in the command line, making them difficult to spot during development.
Implementation: Add the following line to your PHP script: ini_set(‘display_errors’, 1);
Benefits: With this setting enabled, any errors that occur will be displayed directly on the webpage, making them much easier to identify and address.
Advanced Error Displaying:
Custom Error Handling:
Explanation: While displaying all errors is helpful, you may want to customize the way errors are presented for a more user-friendly experience or to enhance debugging capabilities.
Implementation: Use the built-in set_error_handler function to define a custom error handling function that formats and displays errors according to your preferences.
Benefits: Custom error handling allows you to tailor the error output to your specific needs, making it more readable and informative for both developers and end-users.
Error Logging:
Explanation: In addition to displaying errors on the webpage, you may want to log errors in a separate file for future reference or analysis.
Implementation: Utilize PHP’s error_log function to write errors to a designated log file, along with additional contextual information like timestamps, file paths, and line numbers.
Benefits: Error logging provides a centralized location for tracking and analyzing errors, which can be invaluable when troubleshooting complex issues or monitoring application performance over time.
Debug Backtrace:
Explanation: Sometimes, you need more than just the error message to understand the root cause of an issue. A backtrace provides a detailed trail of function calls leading up to the error.
Implementation: Use the debug_backtrace function to retrieve the backtrace information and display it alongside the error message for a more comprehensive view of the issue.
Benefits: With a backtrace, you can quickly identify the sequence of events that led to the error, making it easier to pinpoint the source of the problem and implement a targeted solution.
By mastering the art of displaying PHP errors, you’ll transform your development workflow, enabling you to identify and resolve issues more efficiently. Whether you’re a beginner or an experienced PHP developer, this guide will equip you with the tools and techniques needed to conquer even the most stubborn bugs. So, let’s embrace the power of error display and take your PHP coding skills to new heights!
How To Configure PHP.ini to display all errors?
When working on PHP applications, encountering errors is an inevitable part of the development process. However, properly displaying and logging these errors can significantly streamline the debugging and troubleshooting phases. By following the right practices, you can ensure that all errors are visible, making it easier to identify and resolve issues efficiently. Let’s explore some techniques to help you configure PHP to display all errors effectively.
Configuring PHP.ini
The PHP configuration file, commonly known as php.ini, holds the key to controlling error display settings. If you’re not seeing errors in your browser during testing, adjusting the following directives in the php.ini file can help:
display_errors = On: This directive ensures that all errors, including syntax or parsing errors, are displayed. Without this setting enabled, certain types of errors may remain hidden, hindering the debugging process.- Location of php.ini: To locate the php.ini file, you can use the
phpinfo()function, which will display the loaded configuration file path. Keep in mind that for production environments, it’s generally recommended to disable error display by settingdisplay_errors = Offto prevent sensitive information from being inadvertently exposed.
Utilizing .htaccess for Error Display
If you have access to the directory files, you can leverage the power of the .htaccess file, typically located in the root or public directory of your project. This approach allows you to enable or disable error display without modifying the PHP.ini file directly, which can be particularly useful when working with shared hosting environments where you may not have direct access to the php.ini file.
Here’s how you can configure error display using .htaccess:
php_flag display_startup_errors on
php_flag display_errors on
Custom Error Logging
In addition to displaying errors, it’s often beneficial to log them for further analysis or historical reference. The .htaccess file provides a convenient way to enable custom error logging:
php_value error_log logs/all_errors.log
By leveraging these techniques, you can take control of error display and logging in your PHP applications. Whether you choose to modify the php.ini file or utilize the .htaccess configuration, the key is to have a clear understanding of your environment and the appropriate access levels. With all errors visible and properly logged, you’ll be empowered to tackle debugging challenges more effectively, ultimately leading to more robust and reliable PHP applications.
Mastering Error Reporting in PHP: An In-Depth Look at the error_reporting() Function
The error_reporting() function in PHP is a powerful tool that allows developers to control which errors, warnings, parse messages, and notices are displayed in their applications. By leveraging this function effectively, you can fine-tune the error reporting behavior to suit your specific needs, whether you’re in a development or production environment. Let’s dive into the intricacies of this function and explore its various use cases.
Disabling All Error Reporting
To remove all errors, warnings, parse messages, and notices, you can pass 0 as the parameter to the error_reporting() function:
php
Copy
error_reporting(0);
While this approach may seem tempting, it’s generally not recommended, as it can make debugging significantly more challenging. Instead, it’s advisable to turn off error reporting at the server level (e.g., in the php.ini file or via .htaccess) for production environments.
Displaying Notices
PHP allows variables to be used even when they are not declared, which can lead to potential issues, especially when these undeclared variables are used in loops or conditions. To catch such instances, you can pass E_NOTICE as the parameter to the error_reporting() function:
php
Copy
error_reporting(E_NOTICE);
This setting will display notices related to undeclared variables, helping you identify and address these issues proactively.
Filtering Specific Error Types
The error_reporting() function allows you to filter which errors are displayed by using bitwise operators. For example, to show all errors except notices, you can use the following code:
error_reporting(E_ALL & ~E_NOTICE);
In this example, the ~ (bitwise NOT) operator is used to exclude E_NOTICE from the E_ALL constant, which represents all error types. The & (bitwise AND) operator ensures that only the remaining error types are displayed.
Displaying All Errors
To display all PHP errors, you can use any of the following methods:
error_reporting(E_ALL);
error_reporting(-1);
ini_set(‘error_reporting’, E_ALL);
The error_reporting(E_ALL) approach is the most widely used among developers because it is more readable and easy to understand.
It’s important to note that the error_reporting() function only affects the current script’s error reporting behavior. If you need to apply a specific error reporting level across multiple scripts or your entire application, it’s recommended to set the error_reporting directive in the php.ini file or use the ini_set() function at the beginning of your application’s entry point.
By understanding and effectively utilizing the error_reporting() function, you can gain greater control over the visibility and handling of errors in your PHP applications. This not only aids in the debugging process during development but also allows you to fine-tune the error reporting behavior for production environments, ensuring a balance between helpful error messages and maintaining application security.
Best Practices For Error Logging in PHP?
Effective error logging is crucial for maintaining the stability and reliability of your PHP applications. By implementing proper error logging practices, you can gain valuable insights into issues that may arise and facilitate easier debugging and troubleshooting.

Here are some best practices for error logging in PHP:
Separate Error Logs: It’s recommended to have a dedicated error log file separate from your application’s main log file. This separation ensures that error logs remain clean and focused, making it easier to analyze and search for specific errors without the noise of other log entries.
Log File Rotation: As your application runs and generates log entries over time, the log file can grow quite large. To prevent excessive file sizes and ensure manageability, implement log file rotation. This process involves creating new log files periodically (e.g., daily or weekly) and archiving or deleting older logs after a certain period.
Contextual Information: When logging errors, include as much contextual information as possible. This should include the error message, timestamp, file path, line number, and any relevant data that could aid in understanding the error’s context (e.g., user input, database queries, etc.). This information can be invaluable during debugging and error analysis.
Error Levels: PHP provides different error levels (e.g., notice, warning, error, critical, etc.). Consider logging errors at different levels based on their severity. This allows you to filter and focus on critical errors while still having access to lower-level notices and warnings for further analysis if needed.
Centralized Logging: If your application runs on multiple servers or instances, consider implementing a centralized logging system. This can be achieved by using a dedicated log management solution or by streaming logs to a centralized location (e.g., a log server or cloud-based logging service). Centralized logging makes it easier to analyze logs from multiple sources and correlate errors across different components of your application.
Logging Configuration: Provide a way to configure the logging level and behavior within your application. This could be through a configuration file or environment variables, allowing you to adjust the logging verbosity based on the environment (e.g., development, staging, production) or specific debugging needs.
Error Handling and Logging: Implement a global error handling mechanism in your application by using PHP’s built-in set_error_handler and set_exception_handler functions. These allow you to catch and log errors and exceptions consistently throughout your codebase.
Log Monitoring and Alerting: Consider setting up monitoring and alerting mechanisms for your error logs. This could involve periodically analyzing log files for patterns or specific error conditions and triggering alerts or notifications when critical errors occur. Tools like logstash, Graylog, Elasticsearch, and others can be leveraged for this purpose.
Log Retention and Archiving: Define and implement a log retention policy that aligns with your application’s requirements and any relevant compliance regulations. This policy should specify how long logs should be kept before being archived or deleted, ensuring that you maintain a balance between log availability and storage management.
Security and Privacy: Ensure that your error logs do not contain sensitive information, such as passwords, API keys, or personally identifiable information (PII). If necessary, implement log filtering or masking mechanisms to protect sensitive data from being logged.
By following these best practices, you can establish a robust error logging system that provides valuable insights, facilitates efficient debugging, and contributes to the overall stability and reliability of your PHP applications.
Here is the complete code to enable all wordpress error codes
ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);
How to turn off error messages in php.ini?
To turn off error reporting in the PHP.ini file, you need to locate and modify the error_reporting directive. Here’s an example of how you can do this:
- Find the PHP.ini file location: First, you need to locate the PHP.ini file on your server. The location of this file can vary depending on your operating system and PHP installation. You can use the
phpinfo()function in a PHP script to find the loaded configuration file path. Simply create a new PHP file with the following content:
<?php phpinfo(); ?>
- Open the PHP.ini file: Once you have the path to the PHP.ini file, open it using a text editor. Depending on your server setup, you may need to have administrative privileges or use a command-line text editor like
nanoorvim. - Find the
error_reportingdirective: Search for theerror_reportingdirective in the PHP.ini file. It might be commented out (with a semicolon;at the beginning of the line) or have a value already assigned to it. - Set the
error_reportingvalue: To turn off error reporting, you need to set theerror_reportingdirective to a value that suppresses all error messages. You can do this by assigning the value0(zero) or using theE_ALLconstant with a bitwise NOT operator (~):
error_reporting = 0
error_reporting = ~E_ALL
- Save the PHP.ini file: After making the necessary changes, save the PHP.ini file and restart your web server (Apache, Nginx, etc.) for the changes to take effect.
It’s important to note that turning off error reporting in a production environment is generally recommended to prevent sensitive information from being inadvertently exposed. However, during development and testing phases, it’s advisable to keep error reporting enabled to aid in debugging and troubleshooting.
How to restart the web server after modifying the PHP.ini file?
The process will vary depending on your operating system and the web server software you’re using. Here are some common examples:
- Apache on Linux/Unix:
To restart Apache on most Linux/Unix systems, you can use the following command:
sudo systemctl restart httpd
sudo service httpd restart
httpd with apache2 if your Apache service is named differently.- Apache on Windows:
On Windows systems, you can restart Apache by opening the Apache Service Monitor. Here are the steps:
- Open the Apache Service Monitor (search for “Apache Service Monitor” in the Start menu or run
ApacheMonitor.exefrom the Apache bin directory). - Right-click on the Apache service and select “Restart.”
Alternatively, you can restart Apache from the command prompt:
- Open the Command Prompt as an administrator.
- Navigate to the Apache bin directory (e.g.,
cd C:\Apache24\bin). - Run the following command:
httpd.exe -k restart - Nginx on Linux/Unix:
To restart Nginx on Linux/Unix systems, use the following command:
sudo systemctl restart nginx
sudo service nginx restart
Nginx on Windows:
If you’re running Nginx on Windows, you can restart it using the Nginx Service Manager:
- Open the Nginx Service Manager (search for “Nginx Service Manager” in the Start menu or run
NginxServiceManager.exefrom the Nginx directory). - Right-click on the Nginx service and select “Restart.”
Alternatively, you can restart Nginx from the command prompt:
- Open the Command Prompt as an administrator.
- Navigate to the Nginx directory (e.g.,
cd C:\nginx). - Run the following command:
nginx.exe -s restart
After restarting the web server, your changes to the PHP.ini file should take effect. Keep in mind that some hosting providers or managed environments may have different procedures for restarting the web server. In such cases, consult the provider’s documentation or contact their support team for specific instructions.
Frequently Asked Questions (FAQs):
Why should I display errors during development?
Displaying errors during development is crucial for identifying and resolving issues quickly. It provides valuable information about the root cause of errors, making debugging more efficient.
Should I display errors in a production environment?
It’s generally not recommended to display errors in a production environment, as it can expose sensitive information and potentially compromise security. Instead, implement error logging and handle errors gracefully.
How can I log errors without displaying them?
You can log errors without displaying them by setting display_errors = Off in the php.ini file or using ini_set(‘display_errors’, 0); in your PHP code. Then, implement error logging using the error_log() function or a centralized logging solution.
What are the advantages of using a centralized logging solution?
Centralized logging solutions like the ELK Stack or cloud-based services offer several advantages, including easier management, advanced search and analysis capabilities, and the ability to aggregate logs from multiple sources.
How do I modify the PHP.ini file on a shared hosting environment?
Many shared hosting providers restrict direct access to the php.ini file for security reasons. In such cases, you may need to contact the hosting provider’s support team or explore alternative methods like using .htaccess or setting configurations through a control panel.
By understanding and properly implementing error display and logging techniques, you can streamline the debugging process, maintain application stability, and ensure a balance between helpful error messages and secure code practices.
wp-config.php, set define('WP_DEBUG', true); and define('WP_DEBUG_LOG', true); to log all PHP errors to /wp-content/debug.log. This is especially useful when you cannot display errors directly on the page, such as in AJAX calls or during redirects.Advanced PHP Debugging Techniques for WordPress Developers
Beyond basic error display, modern PHP debugging involves a combination of tools and practices. Here are advanced techniques that can dramatically cut down debugging time:
- Use Xdebug for step‑through debugging – Xdebug allows you to set breakpoints, inspect variables, and step through code execution. When combined with an IDE like PhpStorm or VS Code, you can debug complex interactions in real time. Install Xdebug and configure your IDE to listen for incoming connections.
- Leverage Query Monitor – This WordPress plugin (free) provides an extensive overview of database queries, PHP errors, hooks, and more. It’s invaluable for identifying slow queries and hidden notices that don’t appear on the frontend.
- Implement error handling for production – Use
set_error_handler()andset_exception_handler()to log errors without displaying them to end users. Send critical errors to a monitoring service like Sentry or Rollbar for real‑time alerts.
display_errors = On on a live site can expose database credentials, file paths, and internal logic to attackers. Always turn it off and rely on logging. If you must debug a live site temporarily, restrict by IP address or use a maintenance mode plugin.Using PHP Logging with WordPress Filters and Actions
WordPress developers can leverage the plugin architecture to log errors specific to custom code. For example, you can hook into wp_die or shutdown actions to capture fatal errors. Here’s a snippet to log all errors into a custom file inside wp-content:
function custom_error_logging($errno, $errstr, $errfile, $errline) {
$log = fopen(WP_CONTENT_DIR . '/debug.log', 'a');
fwrite($log, date('Y-m-d H:i:s') . " - $errstr in $errfile on line $errline\n");
fclose($log);
}
set_error_handler('custom_error_logging');This custom handler gives you full control over the format and destination of error logs, which is especially helpful when you need to separate plugin errors from core errors.
Integrating Error Monitoring with CI/CD Pipelines
In modern development workflows, errors are caught early by continuous integration tools. Services like GitHub Actions or CircleCI can run PHPUnit tests and static analysis (e.g., PHPStan, Psalm) to flag potential issues before deployment. By combining these with error logging, you ensure that new code doesn’t introduce unnoticed bugs.
error_log(print_r($variable, true)); at critical points. The output goes to the PHP error log (or WP_DEBUG_LOG). This is much cleaner than using var_dump() which can break AJAX responses and output buffering.Common PHP Errors in WordPress and How to Fix Them
Based on Kinsta’s analysis, the most frequent PHP errors in WordPress include:
- Parse error: syntax error, unexpected T_STRING – Usually caused by missing semicolons or unclosed quotes. Check the line number indicated in the error.
- Fatal error: Allowed memory size exhausted – Increase the memory limit by adding
define('WP_MEMORY_LIMIT', '256M');towp-config.php. - Warning: Cannot modify header information – Happens when output is sent before
header()calls. Ensure there are no spaces before<?phpin any plugin or theme file. - Notice: Undefined variable / index – Use
isset()or the null coalescing operator (??) to check for existence before using variables.
Key Takeaways
- Always enable full error reporting during development – Use
error_reporting(E_ALL); ini_set('display_errors', 1);in your local environment. - Use WordPress‑specific debugging constants –
WP_DEBUG,WP_DEBUG_LOG, andWP_DEBUG_DISPLAYgive you fine‑grained control. - Separate error logging from display – Log everything, show nothing on production.
- Leverage advanced tools – Xdebug, Query Monitor, and centralized logging services speed up root cause analysis.
- Automate error detection – Integrate static analysis and testing into your deployment pipeline.
Summary: Your PHP Debugging Roadmap
Debugging PHP code in WordPress doesn’t have to be a guessing game. By systematically enabling error reporting, logging errors to a secure location, and using advanced tools like Xdebug and Query Monitor, you can quickly pinpoint issues and write more reliable code. Remember to tailor your approach to the environment: display errors aggressively in development, but keep them hidden and logged in production. With the techniques covered in this guide—from basic error_reporting() to custom error handlers and centralized logging—you’ll be well equipped to diagnose and fix PHP errors efficiently, ensuring your WordPress sites run smoothly.
FAQ
How do I enable error logging in WordPress without displaying errors?
Add the following to your wp-config.php file: define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);. Errors will be written to /wp-content/debug.log without appearing on the frontend.
What’s the difference between a notice and a warning?
A notice indicates a minor issue, like using an undefined variable, but the script continues. A warning is more serious (e.g., including a missing file) and may cause unexpected behavior. Both should be fixed to ensure code stability.
Can I log errors to a custom file instead of the default debug.log?
Yes. Use error_log('message', 3, '/path/to/custom.log'); or set a custom handler with set_error_handler() to write to any location. Ensure the file is writable by the web server.
Why do I see “Headers already sent” errors?
This happens when output (e.g., whitespace, HTML, or PHP echo) is sent before header() or setcookie() calls. Check your theme’s functions.php and plugins for spaces before <?php or after ?>. Use ob_start() as a temporary fix.
What’s the best way to debug AJAX requests in WordPress?
Use the browser’s network tab to see the AJAX response. Also enable WP_DEBUG_LOG and check debug.log for any PHP errors triggered during the request. For detailed traces, use Xdebug with your IDE.
How do I see PHP errors on a site using a page builder or caching plugin?
Cache plugins often hide errors by serving cached pages. Temporarily disable caching and minification to see raw PHP output. Also ensure your theme’s wp-config.php is not overriding display settings.
Should I use the same error reporting level for all environments?
No. Development should use E_ALL with display on. Staging can log E_ALL but display off. Production should log E_ALL & ~E_DEPRECATED & ~E_STRICT and never display errors.







