PHP 5 katı standartlar hatasını devre dışı bırak


175

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?


8
@ 451F: Bence buradaki anahtar kelimeler "katı standartlar". Önceki sürümleri bilmiyorum ama PHP 5.4.0 ile 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.
Sahte Kod Maymun Rashid

Ayrıca php.ini dosyasını bulun ve / usr / local / php5 / lib /
yadhu'ya kopyalayın

Yanıtlar:


185

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_loghataların tam olarak nereye gitmesini istediğinizi belirtmek için yönergeyi kullanırlar.


11
Açıkça açıkça belirtmek için: Elbette bunları php.inidosyanızda da ayarlayabilirsiniz , örneğin PHP kodunu değiştiremiyorsanız.
sschuberth

1
Bununla birlikte, üretimdeki katı hataların kaydedilmesi de kötü bir uygulamadır. Günlüklerinizi, önemli olmayan bildirimlerle dolduracağınızdan ve aşağıdaki sorunlardan birine veya her ikisine neden olacağınız için: serverAdmin hataları kaçırır / yok sayar ve günlük dizini bir noktada tüm sunucu alanını tüketir.
Lance

4
Bu benim için işe yaramıyor - Sahte Kod Monkey Rashid'in E_ALL & ~ E_STRICT kodunu aşağıdaki
cevaptan

1
Bu benim php.ini içinde buldum aşağıdaki yanında nasıl çalışır log_errors = On Vs ini_set ('display_errors', '0'); Son set kazanır mı?
indi

@nate bazı kodlar gönderdiğinizde lütfen bize nereye yapıştırabileceğimizi söyleyin Nereye koymak bilmiyorum: PHP kodumu içine php.iniveya içine bir .htaccessyerde.
Даниил Пронин

89

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);


56
+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_STRICTbiçimi kullanmalısınız . Ya da belki de (E_ALL & ~(E_DEPRECATED | E_STRICT))format.
Sahte Kod Maymun Rashid

10
Not: E_STRICT php 5.4'ten bu yana E_ALL'un sadece bir parçası oldu
Fred Haslam

@FakeCodeMonkeyRashid Bunun neden olduğunu merak ediyorum? muhtemelen o zaman değerlendirme sırası önemlidir çünkü?
Aralık'ta

PHP <5.4'te ini_set('error_reporting', E_ALL&~E_STRICT); STRICT hatalarının raporlanmasını ini_set('error_reporting', E_ALL^E_STRICT);
bastırın

Ben kullanarak işaret etmek istiyorum ^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. ^^& ~& ~
Jay

31

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 .htaccesskö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 30719geldiğini merak ediyorsanız , E_ALL (32767), E_STRICT (2048) aslında sayısal değeri tutan sabittir ve ( 32767 - 2048 = 30719)


2
Çok teşekkürler - bu PHP 5.4.7 hile (.htaccess çözüm) yaptı - başka bir şey - .ini değiştirmek bile - hile yapıyordu.

Bunun php_admin_value error_reportingçalışması için kullandım (vhost config'te).
Lou Terrailloune

@Seza, Düzelt Düzelt.
Starx

1
Sayfa ile ilgili değil, bu yöntem tercih edilir çünkü çoğu E_STRICT hatası derleme zamanıdır ve çalışma zamanında geçersiz
kılınamaz

2
Merhaba sadece biraz kolaylaştırmak için, wamp kullananlar için, php> php ayarları >> görüntü hataları tıklayarak hataları devre dışı bırakabilirsiniz. İşaretliyse işaretini kaldırın.
Hemang Rami

9

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);
}

8

Php.ini setinde:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

4

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


Bu gerçekten yararlı, bir Wordpress yüklemesi için hata ayıklama modu vardı ve bunu yaptığını fark etmedim. Bilgi için teşekkürler!
Tim

2

Ü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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.