Reliably read value of PHP display_errors

error-handling, php

Solution

You can get the string representation of the values through ini_get(), values that `display_errors` can be set to is either, `true\false`, `0\1` and `On\Off`. But when user's set their `php.ini` it is more common to use `1` or `On`

if (ini_get('display_errors') == "1") {
 // show debug info
}

or to check for ALL cases, you can perform a switch-case

ini_set('display_errors', 1);
switch (ini_get('display_errors')) {
  case "1":
  case "On":
  case "true":
    // show debug info
}

If you prefer the equality comparison approach, notice that `ini_get` returns a `String` value of `1`, if you test the returned value with `ini_get` using the `==` with the `int` value `1`, it becomes true. If you use the `===` it checks if both are equal and of the same type. `String` is not the same type as `int` so it would return `false`.

1 == "1"; // in PHP, this returns true, it doesn't check the type.
1 ===  "1"; // would be false, this however checks the type. 

Using `ini_get('display_errors')` you can check against values like, `TRUE`, `FALSE`, and even `NULL`. They will return a boolean value of either `0` which is `false` and anything other than `0` evaluates to `true`.

if (2) {
 echo "2 is true!"; // echos "2 is true!"
}

I saw your comment about a discrepancy so I decided to test it myself, here is what I used

<?php
  ini_set('display_errors', 1);
  $verbose = ini_get('display_errors');
  echo $verbose; // echo's 1

  // just to test its return values.
  if ($verbose) { 
     echo "verbose is true";  // echos "verbose is true"
  }

  ini_set('display_errors', 0);
  $verbose = ini_get('display_errors');
  echo $verbose; // echo's 0

  if ($verbose) {
     echo "verbose is not true"; // does not get evaluated
  }
?>

This answer is a bit lengthy, but I hope this is what you need.

Problem

In my PHP error handler I want to do something like: ``` if (ini_get('display_errors') IS ON)) { // show debug info } else { // show just "oops!" } ``` I've look through the docs and stuff, but I can't really find out what the possible values for display_errors are (such as "on", 0, "Yes") and what it does for what value. What should I put in place of the "IS ON" to reliably read this value?

Original source