4

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?

4 Answers 4

6

I use the following code:

if (in_array(strtolower(ini_get('display_errors')), ['1', 'yes', 'on', 'true']) {
  // is enabled
} else {
  // is disabled
}

Or regexp

if (preg_match('/^(1|yes|on|true)$/i', ini_get('display_errors')) {
  // is enabled
} else {
  // is disabled
}
Sign up to request clarification or add additional context in comments.

Comments

5

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.

7 Comments

Technically it is a string, and some people set it to 'on' . So while you could just check if it is equal to 1, this won't work if you are working in a weird environment. Thus making it not reliable.
Too simple. >> ini_set('display_errors', 'On'); $verbose = ini_get('display_errors') == 1; << Verbose is now false, despite the "On".
It's set to On in php.ini but when you call ini_get it returns 1, whether its a string or an int
I didn't know that until I read the documentation from my link, its one of the examples
Thanks for the expansion, but about the discrepancy: You did not yet test setting it to 'On', which is what I did. Never mind though, I'm just checking for true and "On" now. If people set anything else, their fault it breaks.
|
3

Use filter_var

if ( filter_var( ini_get('display_errors'), FILTER_VALIDATE_BOOLEAN) ){

}

And that should catch all of the different ways display_errors could get turned on ("1", "true", "on", "yes", etc.).

I also can't find any official documentation on this, but from what I've experienced, I believe using filter_var with the FILTER_VALIDATE_BOOLEAN flag will cover the full gamut of possible ways an ini setting can be set to true/false.

2 Comments

Documentation states "Returns true for "1", "true", "on" and "yes". Returns false otherwise.". This is the best answer and future proof.
This seems to work: if (filter_var(strtolower(ini_get('display_errors')), FILTER_VALIDATE_BOOLEAN)) {
2

The default is '1' according to the documentation. However, you might want to check the inverse, that it isn't off:

!= FALSE or !empty()

if (ini_get('display_errors') != FALSE)) 
{
     // show debug info
} 
else 
{
     // show just "oops!"
}

Or as Anthony pointed out, you could just check for 1

if(ini_get('display_errors') == 1))

You might also want to check error_reporting, as it is another common setting that is used to control the displaying of errors, although its meaning is slightly different than display_errors

if(error_reporting() != 0)

1 Comment

@Chacha102 - ini_get returns a String, you were correct. :) but apparently it doesn't matter whether you compare 1 or "1", I guess it just depends on the comparison operator.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.