PHP display_errors Reliably okuma değeri

3 Cevap error-handling

Benim PHP hata işleyicisi gibi bir şey yapmak istiyorum:

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

Ben dokümanlar ve malzeme bakmak ettik, ama gerçekten ne değeri ne display_errors için olası değerler (örneğin "Evet", 0, "on" gibi) ne olduğunu öğrenmek ve olamaz.

Ben güvenilir bu değeri okumak için "AÇIK OLDUĞU" yerine ne koymak gerekir?

3 Cevap

Sen ini_get() , values that display_errors, ya, true\false, 0\1 ve {[(ayarlanabilir aracılığıyla değerlerin dize temsilini alabilirsiniz 4)]}. Kullanıcının batınca onların php.ini o 1 veya On kullanmak daha yaygındır

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

veya ALL durumlarda kontrol etmek için, bir anahtar-davayı gerçekleştirebilirsiniz

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

Eğer eşitlik karşılaştırma yaklaşımı tercih ederseniz, fark o ini_get 1 bir String değerini döndürür, sen ile dönen değeri sınamak ise ini_get int değeri ile == ile 1, bu doğru olur. Eğer kullanırsanız hem eşit ve aynı türden olup olmadığını === bunu denetler. String int olarak aynı tip değil yani false dönecekti.

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!"
}

Ben bu yüzden kendimi test etmeye karar verdim bir uyuşmazlık hakkında yorumunuzu gördüm, burada kullanılan budur

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

Bu sorunun cevabı biraz uzun, ama bu neye ihtiyacınız olduğunu umuyoruz.

Varsayılan belgelerine göre, '1 'dir. Ancak, bunu kapalı olmadığını, ters kontrol etmek isteyebilirsiniz:

!= FALSE veya !empty()

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

Anthony belirttiği gibi Yoksa, sadece 1 için kontrol edebilir

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

Ayrıca onun anlamı display_errors biraz daha farklı olmasına rağmen, hataların görüntülenmesini kontrol etmek için kullanılan başka bir yaygın ayardır gibi, error_reporting kontrol etmek isteyebilirsiniz

if(error_reporting() != 0)

Ben aşağıdaki kodu kullanabilirsiniz:

if (in_array(strtolower(ini_get('display_errors')), array('1', 'on', 'true')) {
  // show debug info
} else {
  // show just "oops!"
}