2010-01-29 5 views
1

Dans mon gestionnaire d'erreurs PHP Je veux faire quelque chose comme:valeur lue Fiable de PHP display_errors

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

J'ai regarder à travers les documents et d'autres choses, mais je ne peux pas vraiment trouver ce que les valeurs possibles pour display_errors sont (comme "on", 0, "Yes") et ce qu'il fait pour quelle valeur.

Que devrais-je mettre à la place du "IS ON" pour lire de manière fiable cette valeur?

Répondre

2

Vous pouvez obtenir la représentation de chaîne des valeurs par ini_get(), des valeurs qui display_errors peut être réglé sur est soit, true\false, 0\1 et On\Off. Mais quand l'utilisateur mis leur php.ini il est plus courant d'utiliser 1 ou On

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

ou pour vérifier TOUS cas, vous pouvez effectuer un interrupteur cas

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

Si vous préférez l'égalité approche de comparaison, notez que ini_get renvoie une valeur String de 1, si vous testez la valeur retournée avec ini_get en utilisant le == avec la valeur int1, ça devient vrai. Si vous utilisez le ===, il vérifie si les deux sont égaux et du même type. String n'est pas du même type que int alors il retournera false.

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

En utilisant ini_get('display_errors') vous pouvez vérifier contre des valeurs telles que, TRUE, FALSE et même NULL. Ils renvoient une valeur booléenne de 0 qui correspond à false et toute valeur autre que 0 correspond à true.

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

J'ai vu vos commentaires sur un écart alors j'ai décidé de le tester moi-même, voici ce que je

<?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 
    } 
?> 

Cette réponse est un peu long, mais j'espère que c'est ce que vous avez besoin.

+0

Techniquement, c'est une chaîne, et certaines personnes la règlent sur 'on'. Donc, même si vous pouvez simplement vérifier si elle est égale à 1, cela ne fonctionnera pas si vous travaillez dans un environnement bizarre. Ce faisant, il n'est pas fiable. –

+0

Trop simple. >> ini_set ('display_errors', 'On'); $ verbose = ini_get ('display_errors') == 1; << Verbose est maintenant faux, malgré le "On". –

+1

Il est défini sur On dans php.ini mais quand vous appelez 'ini_get' il renvoie 1, que ce soit une chaîne ou un int –

2

La valeur par défaut est '1' selon la documentation. Cependant, vous pourriez vouloir vérifier l'inverse, qu'il ne soit pas éteint:

!= FALSE ou !empty()

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

Ou comme Anthony a fait remarquer, vous pouvez simplement vérifier 1

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

Vous pouvez également vérifier error_reporting, car il s'agit d'un autre paramètre commun utilisé pour contrôler l'affichage des erreurs, bien que sa signification soit légèrement différente de display_errors

if(error_reporting() != 0) 
+0

@ Chacha102 - 'ini_get' renvoie une chaîne, vous aviez raison. :) mais apparemment, peu importe si vous comparez 1 ou 1, je suppose que cela dépend de l'opérateur de comparaison. –

2

J'utilise le code suivant:

if (in_array(strtolower(ini_get('display_errors')), array('1', 'on', 'true')) { 
    // is enabled 
} else { 
    // is disabled 
} 
Questions connexes