Sıkı standartlar için hata bildirimini devre dışı bırakmak için en üstteki PHP betiğimi kurmam gerekiyor.
Birisi yardım edebilir mi?
Sıkı standartlar için hata bildirimini devre dışı bırakmak için en üstteki PHP betiğimi kurmam gerekiyor.
Birisi yardım edebilir mi?
Yanıtlar:
Hata raporlamayı devre dışı bırakmak mı yoksa kullanıcının bunu görmesini önlemek mi istersiniz? Bir üretim sitesinde bile hataları günlüğe kaydetmek genellikle iyi bir fikirdir.
# in your PHP code:
ini_set('display_errors', '0'); # don't show any errors...
error_reporting(E_ALL | E_STRICT); # ...but do log them
Standart sistem günlüğünüze kaydedilir veya error_log
hataların tam olarak nereye gitmesini istediğinizi belirtmek için yönergeyi kullanırlar.
php.ini
dosyanızda da ayarlayabilirsiniz , örneğin PHP kodunu değiştiremiyorsanız.
php.ini
veya içine bir .htaccess
yerde.
Hata yok.
error_reporting(0);
ya da sadece katı değil
error_reporting(E_ALL ^ E_STRICT);
ve tüm hataları tekrar görüntülemek isterseniz,
error_reporting(-1);
^
Sadece bir tür hatayı atlamak için iyi olduğuna inanıyorum . Ek türleri kapatmak istiyorsanız E_ALL & ~E_DEPRECATED & ~E_STRICT
biçimi kullanmalısınız . Ya da belki de (E_ALL & ~(E_DEPRECATED | E_STRICT))
format.
ini_set('error_reporting', E_ALL&~E_STRICT);
STRICT hatalarının raporlanmasını ini_set('error_reporting', E_ALL^E_STRICT);
^
ziyade ( "xor") & ~
( "değil") bir olduğunu kötü bir fikir ! E_STRICT'in E_ALL'ın bir parçası olduğu ve her zaman bunun bir parçası olacağı varsayımına^
bağlıdır . E_ALL geçmişte değiştiği için bu kötüdür (E_STRICT geçmişini geçmedi, ancak şimdi PHP 5.4'ten beri). Varsayım bir gün başarısız olursa, sadece kırılmaz, aynı zamanda yapması gerekenin tersini de yapar: XOR ( ) işlevinin çalışması nedeniyle E_STRICT özelliğini etkinleştirir . ancak , geçerli E_ALL değeri ne olursa olsun E_STRICT'i her zaman devre dışı bırakır. Bu nedenle kullanılmalıdır. ^
^
& ~
& ~
Yukarıdaki tüm çözümler doğrudur. Ancak, normal bir PHP uygulamasından bahsederken, ihtiyaç duydukları her sayfaya dahil etmeleri gerekir. Bunu çözmenin bir yolu .htaccess
kök klasöründe. Sadece hataları gizlemek için. [Aşağıdaki satırlardan birini dosyaya koyun]
php_flag display_errors off
Veya
php_value display_errors 0
Ardından, hata raporlamayı ayarlamak için
php_value error_reporting 30719
Değerin nasıl 30719
geldiğini merak ediyorsanız , E_ALL (32767), E_STRICT (2048) aslında sayısal değeri tutan sabittir ve ( 32767 - 2048 = 30719
)
php_admin_value error_reporting
çalışması için kullandım (vhost config'te).
Php.ini içinde ayarlanmadıysa , error_reporting bayrağının varsayılan değeri E_ALL & ~ E_NOTICE şeklindedir . Ancak bazı kurulumlarda (özellikle geliştirme ortamlarını hedefleyen kurulumlarda) E_ALL | E_STRICT bu bayrağın değeri olarak ayarlanır (bu geliştirme sırasında önerilen değerdir ). Bazı durumlarda, özellikle PHP 5.3 döneminden önce geliştirilen ve henüz PHP 5.3 tarafından tanımlanan en iyi uygulamalarla güncellenmeyen bazı açık kaynak projeleri çalıştırmak istediğinizde, geliştirme ortamınızda muhtemelen sizin gibi mesajlar alıyorsunuz. Bu durumla başa çıkmanın en iyi yolu, yalnızca E_ALL değerini hata_ raporlama bayrağının değeri olarak ayarlamaktır .php.ini veya kodda (muhtemelen web kökünde index.php gibi bir ön denetleyicide aşağıdaki gibi):
if(defined('E_STRICT')){
error_reporting(E_ALL);
}
WordPress
Wordpress ortamında çalışıyorsanız, Wordpress işlevindeki wp-include / load.php dosyasındaki hata düzeyini ayarlar wp_debug_mode()
. Bu nedenle, bu işlev çağrıldıktan SONRA seviyeyi değiştirmeniz gerekir (git olarak işaretlenmemiş bir dosyada sadece bu geliştirme) veya doğrudan error_reporting()
aramayı değiştirin
Üretime hazır yazılım için temiz ve uygun bir cevap görmedim, işte burada:
/*
* Get current error_reporting value,
* so that we don't lose preferences set in php.ini and .htaccess
* and accidently reenable message types disabled in those.
*
* If you want to disable e.g. E_STRICT on a global level,
* use php.ini (or .htaccess for folder-level)
*/
$old_error_reporting = error_reporting();
/*
* Disable E_STRICT on top of current error_reporting.
*
* Note: do NOT use ^ for disabling error message types,
* as ^ will re-ENABLE the message type if it happens to be disabled already!
*/
error_reporting($old_error_reporting & ~E_STRICT);
// code that should not emit E_STRICT messages goes here
/*
* Optional, depending on if/what code comes after.
* Restore old settings.
*/
error_reporting($old_error_reporting);
E_ALL & ~E_DEPRECATED & ~E_STRICT
üretim için hata raporlaması ayarlamanız önerilir . Sıkı standartları devre dışı bırakmanızı önerdiklerine dikkat edin.