15%

Save 15% on All Hosting Services

Test your skills and get Discount on any hosting plan

Use code:

Skills
Get Started
01.11.2024
1 +1

How to Enable PHP Error Reporting: A Complete Developer’s Guide

Debugging PHP applications efficiently can mean the difference between hours of frustration and a swift, clean fix. Whether you're building a new web application or maintaining an existing one, knowing how to enable and configure PHP error reporting is a fundamental skill every developer needs. This comprehensive guide covers every method available — from quick in-script fixes to server-level configuration — and explains how to handle error reporting safely across both development and production environments.

What Is PHP Error Reporting and Why Does It Matter?

PHP error reporting is a built-in feature that controls which types of errors, warnings, and notices PHP surfaces during script execution. When properly configured, it gives you immediate, actionable feedback about problems in your code — including syntax errors, undefined variables, deprecated functions, runtime exceptions, and failed database queries.

By default, many server configurations suppress error output entirely, especially in production environments. This is intentional: displaying raw error messages to end users can expose sensitive information such as file paths, database credentials, and internal application logic. However, during development, suppressing errors makes debugging unnecessarily difficult.

Understanding how to toggle error reporting on and off — and where to configure it — is essential for any developer working with PHP on a VPS Hosting environment or shared server.

PHP Error Levels at a Glance

PHP categorizes errors into distinct levels, each controlled independently:

ConstantDescription
E_ERRORFatal runtime errors that halt script execution
E_WARNINGNon-fatal runtime warnings
E_NOTICEMinor notices about potential code issues
E_DEPRECATEDWarnings about functions that will be removed in future PHP versions
E_PARSECompile-time parse errors
E_ALLAll errors, warnings, and notices combined

Using E_ALL during development ensures you catch every possible issue before it reaches production.

Method 1: Enable PHP Error Reporting Directly in Your Script

The fastest way to enable error reporting is to add two lines at the very top of your PHP file, before any other output. This approach is ideal for quickly debugging a specific script without modifying server-wide configuration files.

<?php
error_reporting(E_ALL);          // Report all types of errors
ini_set('display_errors', 1);    // Display errors directly in the browser
ini_set('display_startup_errors', 1); // Also show errors during PHP startup
?>

What Each Line Does

  • error_reporting(E_ALL) — Sets the error reporting level to capture every category of error, including notices, warnings, deprecation alerts, and fatal errors. You can also combine specific constants using bitwise operators, for example E_ALL & ~E_NOTICE to exclude notices.
  • ini_set('display_errors', 1) — Instructs PHP to output error messages directly to the browser or command line. Setting this to 0 hides errors from output without disabling their logging.
  • ini_set('display_startup_errors', 1) — Enables reporting of errors that occur during PHP's startup sequence, which display_errors alone does not cover.

> Important: Always place these lines at the absolute top of your script. If a fatal parse error occurs before these lines are reached, they will have no effect. For parse errors, you must configure error reporting at the php.ini level instead.

When to Use This Method

This method is best suited for:

  • Debugging a single script or module quickly
  • Shared hosting environments where you lack access to php.ini
  • Temporary debugging sessions during active development

For a persistent, server-wide configuration, modifying the php.ini file is the most reliable approach. Changes made here apply globally to all PHP scripts running on the server, making it the preferred method for dedicated development environments.

Step 1: Locate Your php.ini File

The location of php.ini varies depending on your operating system, PHP version, and web server. The easiest way to find it is to create a temporary PHP file containing the following:

<?php
phpinfo();
?>

Upload this file to your server, open it in a browser, and search for the "Loaded Configuration File" entry. This will display the exact path to the active php.ini file.

Common default locations include:

  • Linux (Apache): /etc/php/8.x/apache2/php.ini
  • Linux (CLI): /etc/php/8.x/cli/php.ini
  • Linux (Nginx + PHP-FPM): /etc/php/8.x/fpm/php.ini
  • Windows (XAMPP): C:xamppphpphp.ini
  • macOS (MAMP): /Applications/MAMP/conf/php/php.ini

> Security reminder: Delete or restrict access to your phpinfo() file immediately after use. It exposes detailed server configuration data that could be exploited.

Step 2: Edit the php.ini File

Open the php.ini file using a text editor or via SSH on your server:

sudo nano /etc/php/8.x/apache2/php.ini

Locate the following directives and update them as shown:

Before (typical production defaults):

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
log_errors = On

After (development configuration):

display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php/error.log

Step 3: Restart Your Web Server

After saving your changes, restart the web server to apply the new configuration:

For Apache:

sudo systemctl restart apache2

For Nginx with PHP-FPM:

sudo systemctl restart php8.x-fpm
sudo systemctl restart nginx

For XAMPP on Windows:

Open the XAMPP Control Panel and click Stop then Start next to Apache.

Method 3: Enable Error Reporting via .htaccess (Apache Only)

If you are on a shared hosting environment without direct access to php.ini, and your server runs Apache, you can override PHP settings using a .htaccess file placed in your website's root directory.

php_flag display_errors On
php_flag display_startup_errors On
php_value error_reporting 32767
php_flag log_errors On
php_value error_log /home/yourusername/logs/php_errors.log

The numeric value 32767 corresponds to E_ALL in PHP. This method is particularly useful on Shared Web Hosting plans where server-level configuration access is restricted.

> Note: This method only works if your host allows PHP directive overrides via .htaccess. Some hosts disable this for security reasons.

Method 4: Configure Error Reporting in Local Development Environments

If you are running a local development stack such as XAMPP, MAMP, or WAMP, the process is straightforward.

XAMPP (Windows / Linux / macOS)

  1. Open the XAMPP Control Panel
  2. Click Config next to Apache
  3. Select PHP (php.ini) from the dropdown
  4. Apply the development settings described in Method 2
  5. Restart Apache from the Control Panel

MAMP (macOS)

  1. Open MAMP Preferences
  2. Navigate to the PHP tab
  3. Click the php.ini button to open the configuration file
  4. Apply the development settings and save
  5. Restart MAMP servers

Docker-Based Environments

If you use Docker for local development, you can pass PHP configuration values directly via environment variables or mount a custom php.ini file:

RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/custom.ini
RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/custom.ini

Testing Your Error Reporting Configuration

Once you have enabled error reporting using any of the methods above, verify it is working correctly by deliberately introducing an error into a test script:

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

// Intentional error: undefined variable
echo $undefinedVariable;

// Intentional warning: wrong argument count
strlen();

// Intentional notice: undefined array key
$array = [];
echo $array['missing_key'];
?>

If error reporting is configured correctly, PHP will display notices and warnings for each of these issues. You should see output similar to:

Notice: Undefined variable: undefinedVariable in /var/www/html/test.php on line 5
Warning: strlen() expects exactly 1 argument, 0 given in /var/www/html/test.php on line 8
Notice: Undefined index: missing_key in /var/www/html/test.php on line 12

Disabling Error Display and Logging Errors in Production

Once your application is ready for deployment, you must never display error messages to end users. Exposed errors can reveal:

  • Absolute file paths on the server
  • Database table names and query structures
  • PHP version and extension details
  • Application logic and configuration data

This information is a significant security risk and can be exploited by malicious actors. Instead, configure PHP to log errors silently to a file.

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php/production_errors.log

Notice that error_reporting remains set to E_ALL even in production. This ensures all errors are captured in your log file for review, without exposing them to visitors.

Creating and Securing the Error Log File

# Create the log directory
sudo mkdir -p /var/log/php

# Create the log file
sudo touch /var/log/php/production_errors.log

# Set appropriate ownership
sudo chown www-data:www-data /var/log/php/production_errors.log

# Restrict permissions
sudo chmod 640 /var/log/php/production_errors.log

Monitoring Your Error Logs

You can monitor your PHP error log in real time using the tail command:

tail -f /var/log/php/production_errors.log

This is particularly useful on a Dedicated Server where you have full root access and can configure log rotation, alerting, and monitoring tools such as Logwatch or Fail2Ban.

PHP Error Reporting: Development vs. Production Settings Summary

SettingDevelopmentProduction
display_errorsOnOff
display_startup_errorsOnOff
error_reportingE_ALLE_ALL
log_errorsOnOn
error_logOptionalRequired

Advanced: Custom Error Handlers

For more sophisticated applications, PHP allows you to define a custom error handling function using set_error_handler(). This gives you full control over how errors are processed, formatted, and stored.

<?php
function customErrorHandler(int $errno, string $errstr, string $errfile, int $errline): bool {
    $timestamp = date('Y-m-d H:i:s');
    $message = "[$timestamp] Error $errno: $errstr in $errfile on line $errline" . PHP_EOL;

    // Log to a custom file
    error_log($message, 3, '/var/log/php/custom_errors.log');

    // Optionally display a friendly message to users in production
    if (ini_get('display_errors')) {
        echo "<pre>$message</pre>";
    }

    return true; // Prevent PHP's default error handler from running
}

set_error_handler('customErrorHandler');
?>

Custom error handlers are especially valuable when building applications that require structured logging, integration with monitoring services like Sentry or Datadog, or user-friendly error pages.

Choosing the Right Hosting Environment for PHP Development

Your hosting environment plays a critical role in how effectively you can configure and manage PHP error reporting. Here is a quick overview of what each environment offers:

  • Shared Web Hosting — Limited access to php.ini; rely on .htaccess or in-script configuration. Best for small projects.
  • VPS Hosting — Full root access, complete control over php.ini, PHP-FPM pools, and server configuration. Ideal for professional PHP development.
  • VPS with cPanel — Combines root-level control with the convenience of a graphical interface for managing PHP versions and settings per domain.
  • Dedicated Servers — Maximum performance and isolation; best for high-traffic PHP applications with complex logging and monitoring requirements.

If you are serious about PHP development and need a stable, configurable environment with full control over your server stack, a VPS or dedicated server is the right choice.

Frequently Asked Questions

Why are my PHP errors not showing even after enabling error reporting in my script?

This is usually caused by a php.ini directive overriding your in-script settings, or a parse error occurring before your error_reporting() call is reached. Verify your php.ini settings and consider enabling error reporting at the server level.

Can I enable error reporting for just one directory?

Yes. Place a .htaccess file with PHP error directives in the specific directory, or use a per-directory php.ini file if your server supports it.

Does enabling error reporting slow down my application?

Negligibly. The performance impact of error reporting itself is minimal. However, writing to log files on every request can add minor I/O overhead in high-traffic environments.

What is the difference between display_errors and log_errors?

display_errors sends error output to the browser or command line. log_errors writes errors to a file. In production, always use log_errors = On with display_errors = Off.

Conclusion

Enabling PHP error reporting is one of the most impactful steps you can take to improve your development workflow. It transforms silent, invisible failures into clear, actionable messages that point you directly to the source of the problem — saving hours of guesswork and debugging time.

The key takeaways from this guide are:

  1. Use error_reporting(E_ALL) and ini_set('display_errors', 1) for quick, per-script debugging
  2. Modify php.ini for persistent, server-wide error reporting in development environments
  3. Use .htaccess when you lack direct access to php.ini on shared hosting
  4. Always disable display_errors in production and redirect error output to a secure log file
  5. Consider a custom error handler for advanced logging, monitoring, and user-friendly error pages

Choosing the right hosting environment also matters. Whether you opt for Shared Web Hosting for a simple project or a fully managed VPS Hosting plan for a professional PHP application, having the right level of server access ensures you can configure error reporting exactly the way your project demands.

By mastering PHP error reporting — and knowing when to enable or suppress it — you build more reliable, secure, and maintainable applications from the ground up.

15%

Save 15% on All Hosting Services

Test your skills and get Discount on any hosting plan

Use code:

Skills
Get Started