PHP'de uyarı mesajlarını kaldırma


Yanıtlar:


349

Uyarıya neden olan şeyi gerçekten düzeltmelisiniz, ancak hataların görünürlüğünü kontrol edebilirsiniz error_reporting(). Uyarı mesajlarını atlamak için aşağıdakine benzer bir şey kullanabilirsiniz:

error_reporting(E_ERROR | E_PARSE);

53
E_ALL ^ E_WARNING, uyarıların yanı sıra tüm hata raporlarını etkinleştirmek, daha iyi bir argüman seçimi gibi görünüyor error_reporting.
Mark Amery

1
Genel olarak kabul ediyorum, benim durumumda uyarı mesajını oluşturmak, birim testlerimin bir parçası olduğu için amaçlanan davranıştı.
pgee70

121

Tüm hata mesajlarını bastırmak için işlev çağrınızın önüne @ koyabilirsiniz .

@yourFunctionHere();

4
Bu sadece hatayı gizler, hala oluyor. Hatalar PHP'yi yavaşlatır, bu nedenle hatayı mümkün olduğunca düzeltmek en iyisidir. @ Kullanılması, hata olmadığında bile kodu yavaşlatır. vega.rd.no/articles/php-performance-error-suppression
dprevite

46
Bazen (maalesef) gerçekten başka seçeneğiniz yok. Örneğin, parse_url () PHP işlevi, "ciddi şekilde hatalı biçimlendirilmiş" URL'ler için Uyarılar oluşturur. Bu nedenle, program çıktısında bu PHP uyarılarını tolere etmelisiniz (ayrıştırıcı / doğrulayıcı uygulamaları için kabul edilemez olabilir), Uyarıları bir şekilde bastırmalı veya URL'ler için kendi ayrıştırıcı / doğrulayıcınızı yazarak bozuk PHP davranışı üzerinde çalışmalısınız. Bu durumda, @ öğesini seçiyorum.
Peter

1
ÖNEMLİ: Bu yöntemi kullanarak, uyarı oluşturan sorunu düzeltemezsiniz veya (2) php error_reporting yoluyla uyarılarınızı son kullanıcılardan gizleyemezseniz ... Uyarıları geliştiricilerinizden gizlemek bir çözüm DEĞİLDİR.
Joshua Kissoon

3
Bunun neden önemli olduğunu açıklayayım. Gibi bazı işlevler dns_get_recorduyarı verir. Kodunuz uyarıyı telafi edebilir ancak yine de atar. Hata raporlamayı kapatmak üretim sunucusunda çalışır, ancak devel sunucusunda çalışmaz. XML içeriği oluşturuyorsanız, sunucu uyarıdan kaynaklanan hatalı biçimlendirilmiş XML gönderdiğinden uyarı tarayıcının görüntülenmemesine neden olur. Bazen bunu devel'de istersiniz, ancak zaten telafi ettiğiniz geçici bir DNS arama hatasının neden olduğu bir şey için değil.
Alice Wonder

2
Bunun neden faydalı olduğunu açıklayayım, tüm uyarı mesajları yerine uyarıyı hata olarak ele almak ve kendi hata mesajınızı oluşturmak isteyen sizsiniz
Daniel N.

43

Diğer tüm hata raporlarını etkin durumda bırakırken uyarıları bastırmak için:

error_reporting(E_ALL ^ E_WARNING); 


18

Diğer tüm hataları görüntülerken uyarıları ve diğer bazı hata türlerini (örneğin, bildirimleri) bastırmak istiyorsanız, şunları yapabilirsiniz:

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);

15

Çekirdek Php içinde uyarı mesajı kümesini gizlemek için error_reporting (0) en üstündeki ortak dosya veya bireysel dosyayı içerir.

Wordpress gizle uyarıları ve bildirimleri wp-config.php dosyasına aşağıdaki kodu ekleyin

ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Wordpress'te günlükleri gizlemek söz konusu olduğunda bu en iyi çözümdür. Teşekkür ederim!!
Neo Morina

10

Soruyu tam olarak cevaplamıyor, ancak bunun bazı durumlarda daha iyi bir uzlaşma olduğunu düşünüyorum:

Üçüncü taraf kitaplığındaki printf () ifadesinin sonucu olarak bir uyarı iletisi aldım. Nedenin tam olarak ne olduğunu biliyordum - üçüncü taraf kodlarını sabitlerken geçici bir çözüm. Uyarıların bastırılmaması gerektiğine katılıyorum, ancak uyarı mesajı ekranda beliren çalışmamı bir müşteriye gösteremedim. Çözümüm:

printf('<div style="display:none">');
    ...Third-party stuff here...
printf('</div>');

Uyarı hala sayfa kaynağında bana hatırlatma olarak geldi, ancak müşteri tarafından görülemedi.


5
Şahsen ben kullanardım ob_start()ve ob_end_clean()onun yerine. Bu şekilde, öğeler tarayıcıya bile gönderilmez (burada yaptığı).
h2ooooooo

6
Bu yüzden "bazı durumlar", "uyarılar bastırılmamalı" ve "bana hatırlatma" yı dahil ettim.
DaveWalley

1
Daha fazla oy vermeden önce lütfen cevabımı okuyun. "Üçüncü taraf", "uzlaşma" ve yukarıdaki yoruma dikkat edin. Bu yanıtı, başka birinin benimle aynı durumda olması durumunda ekledim ve bu özel durumda, bu beni kurtardı, ancak diğer tüm cevaplar o kadar iyi olmayacaktı. Bir dahaki sefere yardımcı olmak hakkında iki kez düşüneceğim.
DaveWalley

Bu parlak fikri kaldırmadığınız için teşekkür ederiz. Sistemimde, istemcilerden geri gönderilen tüm hataları ve uyarıları kaydediyorum ve bir yönetici oturum açtığında, bakım ekibine tavsiyede bulunabilmeleri için bu tür etkinliklere anında uyarılıyorlar. Site eğitim oyunları içindir, bu yüzden bir saat kadar bir şey ters giderse biggie değildir.
cneeds

8

Benim php.ini aşağıdaki gibi yaparım :

error_reporting = E_ALL & ~E_WARNING  & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

Bu yalnızca önemli hataları günlüğe kaydeder ve uyarı vermez.


7

Daha iyi bir çözüm .htaccess yapılandırması olduğunu düşünüyorum Bu şekilde uygulama kodunu değiştirmek zorunda değilsiniz. İşte Apache2 için yönergeler

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

7

Error_reporting kullanarak uyarıyı engelleyebilirsiniz, ancak en iyi yol komut dosyanızı ilk etapta düzeltmektir.

Nasıl yapılacağını bilmiyorsanız, sorunuzu düzenleyin ve bize söz konusu satırı ve görüntülenen uyarıyı gösterin.


7
Safaali, sorunları çözmelisin, görmezden gelmemelisin.
Sampson

2
PHP ile belirli bir ilginiz olduğunu gören Safaali, kendinize bir iyilik yapın ve bu senaryoyu düzeltmeye bakın.
Pekka

0

Hata Kontrol Operatörü ile zaten bir cevap var ama açıklama eksikliği var. @İşleci her ifadede kullanabilirsiniz ve hataları gizler (Önemli Hatalar hariç).

@$test['test']; //PHP Notice:  Undefined variable: test

@(14/0); // PHP Warning:  Division by zero

//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error:  Uncaught Error: Call to undefined function customFuntion()

Hata ayıklama için hızlı ve mükemmel bir yöntemdir. Ancak hiçbir zaman üretimde kullanmamalı veya kalıcı olarak yerel sürümünüze dahil etmemelisiniz. Size çok fazla gereksiz tahriş verecektir.

Bunun yerine şunları göz önünde bulundurmalısınız:

1. Kabul edilen yanıtta belirtildiği gibi ayarları bildirme hatası.

error_reporting(E_ERROR | E_PARSE);

veya PHP INI ayarlarından

ini_set('display_errors','Off');

2. İstisnaları yakalama

try {
    $var->method();
} catch (Error $e) {
    // Handle error
    echo $e->getMessage();
}

0

Tüm uyarıları yok saymak için kodunuzun üstünde şu örneği kullanın:

error_reporting(0);

Ve cevabınızın kabul edilen cevapla farkı nedir?
endo64
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.