PHP 5.4'te Katı Standartları Devre Dışı Bırakma


95

Şu anda php 5.4'te bir site çalıştırıyorum, bundan önce sitemi 5.3.8'de çalıştırıyordum. Ne yazık ki, php 5.4 E_ALLve birleştiriyor E_STRICT, bu da önceki ayarımın error_reportingartık çalışmadığı anlamına geliyor . Önceki değerim, E_ALL & ~E_NOTICE & ~E_STRICTDeğerleri birer birer etkinleştirmeli miyim?

Çok fazla hatam var ve dosyalar düzeltmem için çok fazla kod içeriyor.


11
Tavsiye ... Kodu düzeltin yoksa hatalar daha iyi ve hata ayıklaması daha zor hale gelir
Baba

7
s / Maalesef / Neyse
Nikic

96
Tavsiyen için teşekkürler, ancak tüm jfusion phpbb3 eklentisini yeniden yazmak için gerekli bilgiye sahip değilim. küçümsediğin için teşekkürler.
icomrade

12
Arkadaşlarımıza katılıyorum, denemek ve hataları düzeltmek, gelip ayak bileğinizi ısırabilirler, ayrıca tüm hataları gizlemek, hata ayıklamayı zorlaştırır. Ama aynı zamanda, bu yalnız soru için posteri yargılamanın adil olduğunu düşünmüyorum, eğer müşteriniz telefonda olduğu için uzun zamandır BT ile çalışmadığınız doğmamış çocuklarınızı büyülüyor diye etrafa çirkin bir iş yazmak zorunda kalmadıysanız
Jonathan dos Santos

7
Bu tamamen mantıklı bir soru ve evet @icomrade - buradaki küçümseme ve alay konusunda haklısınız. StackOverflow'un daha az çekici özelliklerinden biridir. Hepsi söylendi, hepsini yapamasanız bile, aldığınız uyarıların en azından bazılarını ele almanızı tavsiye ederim.
04'te halfer

Yanıtlar:


139

Yorum yapanların belirttiği gibi, en iyi seçenek hataları düzeltmektir, ancak bu her zaman mümkün değildir. Php.ini değişikliğinizde

error_reporting = E_ALL

-e

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Php.ini'ye erişiminiz yoksa, bunu potansiyel olarak .htaccess dosyanıza koyabilirsiniz:

php_value error_reporting 30711

Bu, E_ALL değeri (32767) ve E_STRICT (2048) ve E_NOTICE (8) değerlerinin kaldırılmasıdır.

.Htaccess dosyasına erişiminiz yoksa veya bu dosya etkinleştirilmemişse, muhtemelen bunu bir tarayıcı çağrısından yüklenen herhangi bir komut dosyasının PHP bölümünün en üstüne koymanız gerekecektir:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

Bunlardan biri yazılımı kullanmanıza yardımcı olmalıdır. Bildirimler ve katı şeyler, sorunların veya olası sorunların göstergeleridir ve bazı kodların PHP 5.4'te düzgün çalışmadığını görebilirsiniz.


11
Php 5.4.5 kullanıyorum ve yukarıdakilerin hepsini denedim, ancak katı bildirimleri devre dışı bırakamadım :( başka fikirler?
ro ko

2
Error_reporting () içindeki diğer parçalarla birlikte & ~ E_DEPRECATED yazmayı deneyebilirsiniz. Hangi mesajları görüyorsun?
David Stockton

4
@roko Kodunuzun bir yerde bunu geçersiz kılması mümkün mü?
Php.ini'de

1
@AndrewSpear Bu çok tuhaf. Teoride, hata raporlama ayarı, gösterildikleri her yerde gösterilen hataları etkilemelidir. Display_errors ayarı, çıktıdaki (PHP sayfalarında) hataları alıp almayacağınızı ve error_log'un hataların günlüğe nerede yazılacağını etkileyeceğini etkilemelidir. Display_errors açıksa, ekranda günlükte olduğu gibi aynı hataları görmelisiniz.
David Stockton

4
Basit bir soruyu StackOverflow Smuglord ™ 'a dönüşmeden basit bir cevapla cevaplamak için +1.
Joshua Pech

2

.htaccess php_value yalnızca PHP Sunucu API'sini Web sunucusu Apache modülü olarak kullanıyorsanız çalışır. IfModule sözdizimini kullanın:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

PHP Sunucusu API CGI / FastCGI kullanıyorsanız

ini_set('error_reporting', 30711);

veya

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

PHP kodunuzda veya PHP yapılandırma dosyalarınızda .user.ini | php.ini değişikliği:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

sanal ana makinenizde, sunucu düzeyinde.


1



PHP kodunda aynı anda iki yerde error_reporting ayarladığımda benim için çalıştı

ini_set('error_reporting', 30711);


ve .htaccess dosyasında

php_value error_reporting 30711

Php.ini'ye erişimim olmadan benim için çalışan tek şey, yukarıdakilerden biri kendi kendine çalışmaz, sadece 500 hatası döndürdü. İkisi birlikte bebeğim !!!
Jamie Hutber

1

E_DEPRACATED'ı da devre dışı bırakmanız gerekirse, şunu kullanın:

php_value error_reporting 22527

Benim durumumda CMS Made Simple "E_STRICT error_reporting'de etkinleştirildi" ve "E_DEPRECATED etkinleştirildi" den şikayet ediyordu. Bu bir satırı .htaccess'e eklemek her iki yanlış yapılandırmayı da çözdü.


0

Dikkat edin, bunun etkili olması için LAMP, Apache veya kullandığınız her şeyi yeniden başlatmanız gerekebilir. Bu konuda bir süre beynimizi karıştırdık, hizmetler yeniden başlatılıncaya kadar, muhtemelen web sitesi önbelleğe alındığı için hiçbir etkide bulunmadı.


Hayır! Bunun nedeni Apache'nin PHP ayarlarını yeniden yüklemesi gerektiğidir. Bu, AFAIK yalnızca servis başladığında yapılır.
svin83
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.