Hoş geldiniz!

Techforum.tr, internetin sunduğu imkanlarla teknolojiye ilgi duyan bireyleri aynı sanal çatı altında toplayan bir çevrimiçi forum platformudur. Yazılımdan donanıma, mobil uygulamalardan yapay zekaya, en güncel teknolojik gelişmelerden geçmiş deneyimlere kadar geniş bir yelpazede konuların tartışıldığı, soruların sorulduğu ve cevapların arandığı bir bilgi paylaşım merkezidir.

Aramıza Katıl..!

.Htaccess kullanarak tüm PHP hataları nasıl gizlenir?

By_KuŞ

TechForum.tr
Yönetici
Site Yönetimi
Yetki Sahibi
Katılım
7 Aralık 2024
Mesajlar
216
Bu dersimizde PHP hatalarını gizlemek gibi bir şeyi öğreneceğiz. Yol boyunca, yalnızca bu hataların çıktısının nasıl bastırılacağına değil, aynı zamanda bunların bir günlük dosyasına nasıl yazılacağına, bu günlük dosyasının nasıl korunacağına, PHP hata raporlama düzeyinin nasıl yapılandırılacağına (hataların ne kadar ciddi olduğu) da bakacağız. uyarıların gösterilip gösterilmeyeceğini), hata satırlarının maksimum boyutunun nasıl ayarlanacağını ve tekrarlanan hataların kaydedilmesinin nasıl devre dışı bırakılacağını öğrenin.

PHP hatalarını gizlemeli miyim?
PHP hataları, saldırganların siteniz ve sunucunuz hakkında veri toplamasına olanak tanıyan çok çeşitli bilgiler sağlar. Ancak bu sorunun cevabı kesin bir “evet” olsaydı, o zaman PHP programları ile her dosyaya tek bir satır eklenerek her şey çözülürdü.

Kod:
error_reporting(0);

Aslında uyarılar (kritik olmayan hatalar) dahil tüm hataların test aşamasında görüntülenmesi gerekir. Hataların ve uyarıların görüntülenmesi aynı zamanda çalışma ortamınızdaki mevcut (veya olası) sorunları anlamanıza da yardımcı olacaktır. Ücretsiz dağıtıma yönelik programlarda hataların ve uyarıların görüntülenmesini engellememelisiniz, çünkü sorunlar ortaya çıkarsa, sorunlarla ilgili tüm kullanıcı raporları aynı olacaktır: "beyaz bir ekran var", bu da sorunu çözme girişimlerini büyük ölçüde karmaşıklaştıracaktır. Genel olarak geliştirme amaçlı sunucularda (örneğin, ev sunucusunda), error_reporting(0)

yöntemlerini kullanarak PHP hatalarını ve uyarılarını temizlemeye gerek yoktur ve @ nedenlerini incelemeniz ve kaynak kodunu düzeltmeniz gerekir. Üretim sunucularında, PHP kodunda meydana gelen hataların herkese gösterilmemesi şiddetle tavsiye edilir, ancak yalnızca bunların görüntülenmesinin engellenmesi değil, aynı zamanda bunların bir günlüğünü tutulması, sistem yöneticisi ve PHP için bir yere yazılması da önerilir. programcı - bu günlüklerden site/sunucudaki olası sorunlar hakkında önemli bilgiler alacaklardır. .htaccess aracılığıyla PHP hata günlüğü nasıl etkinleştirilir Eğitimin bu bölümünde, Apache kullanıcılarına PHP hata çıktısını nasıl bastıracaklarını ve bunları ziyaretçilerden nasıl gizleyeceklerini göstereceğim, daha fazla analiz için PHP hata günlüğünü etkinleştirirken, tüm bu yapılandırma .htaccess dosyası. Genel olarak, bu yöntemin başka bir harika avantajı daha vardır - tüm PHP hatalarını ve uyarılarını yakalamaya çalışmak yerine, bunların her birini kişisel günlüğümüze kaydedeceğiz, bu sayede ortaya çıkan tek bir hata, ortaya çıkmasa bile kaçmayacaktır. sizden ve belki de modelleme için aklınıza bile gelmeyecek koşullar altında sitenizi ziyaret eden biri. .htaccess dosyasının sihirli gücü sayesinde bu etkili stratejiyi uygulamanın kolay bir yolu var. PHP Hatalarını Ziyaretçilerden Gizlemek PHP hatalarını .htaccess kullanarak gizlemenin farklı yolları vardır. Bu, alan adınızın httpd.conf dosyasına veya aşağıdaki içeriğe sahip .htaccess dosyasının köküne (veya herhangi bir başka hedef dizine) aşağıdaki .htaccess yönergelerini ekleyerek yapılabilir:

Kod:
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

Bu, PHP hatalarının artık sitenizde herkese açık olmamasına neden olacaktır. Bu, potansiyel güvenlik risklerini ortadan kaldırır ve bu çirkin, anlaşılmaz PHP hatalarının sitenizin düzenini bozmasını ve ziyaretçilerinizin kafasını karıştırmasını önler. Bunun için herhangi bir kod düzenlemesine gerek yoktur.

Özel PHP Hata Günlüğünü Etkinleştirme
Artık PHP hatalarını herkesten gizlediğimize göre, onları izleyebilmek için günlüğe kaydetmeyi (kaydetmeyi) etkinleştirelim. Bu, alan adınızın httpd.conf dosyasına veya kök (veya herhangi bir hedef) dizinde bulunan .htaccess dosyanıza aşağıdaki .htaccess yönergelerini ekleyerek yapılır.

Kod:
php_flag log_errors on
php_value error_log /home/path/public_html/domain/PHP_errors.log

Bunun işe yaraması için, son satırdaki yolu, PHP_errors.log dosyanızın gerçek konumuyla eşleşecek şekilde düzenlemeniz gerekir. Elbette bununla birlikte bu dosyayı oluşturup ona 755 veya gerekirse 777 izinlerini vermeniz gerekiyor. Son olarak, .htaccess dosyanıza şu son kod satırlarını ekleyerek bu günlük dosyasının güvenliğini sağlamanız gerekiyor:

Kod:
<Files PHP_errors.log>
     Order allow,deny
     Deny from all
     Satisfy All
</Files>

Artık her şey yerli yerinde olduğuna göre, bazı PHP hataları vererek her şeyin düzgün çalışıp çalışmadığını kontrol edin. Ayrıca günlük dosyanızın güvenliğini, dosyaya bir tarayıcı aracılığıyla erişmeyi deneyerek de test etmek isteyebilirsiniz.

.htaccess ile Gelişmiş PHP Hata İşleme
Şimdi bu konuyu daha derinlemesine inceleyelim, ek işlevler ekleyelim ve farklı uygulamaları inceleyelim. Öncelikle üretim ortamları (örneğin, çevrimiçi, aktif ve herkese açık web siteleri ve uygulamalar) için PHP hatalarının ele alınmasına bakacağız, ardından geliştirici ortamları (örneğin, geliştirilmekte olan projeler, test edilen projeler, vb.) için hataların ele alınmasına bakacağız. özel vb.).

PHP Hata Raporlama Düzeyini Kontrol Etmek
.htaccess kullanarak, hata raporlama düzeyini pratik ihtiyaçlarınıza uyacak şekilde özelleştirmek mümkündür. PHP hata oranlarını izlemek için genel bir yöntem aşağıdaki gibidir:

Kod:
php_value error_reporting

Aşağıdakiler dahil, "rakam" yerine kullanılabilecek birkaç ortak değer vardır:
  • En eksiksiz hata mesajı (E_ALL'a karşılık gelir) - bunun için "32767" değerini kullanın.
  • Tam hata raporlama - Tam PHP hata günlüğü için, çalışma zamanı kullanımdan kaldırma bildirimleri (PHP'nin gelecek sürümlerinde çalışmayacak kodla ilgili uyarılar) dışındaki her şeyi günlüğe kaydedecek olan "8191" değerini kullanın.
  • Zend Hata Raporlaması - Zend komut dosyası motoru tarafından oluşturulan hem ölümcül hem de ölümcül olmayan derleme zamanı uyarılarını kaydetmek için "192"yi kullanın.
  • Temel Hata Raporlaması - Çalışma zamanı bildirimlerini günlüğe kaydedin. Betiğin yürütülmesi sırasında bir hataya işaret edebilecek bir şeyin meydana geldiğini belirtir; ancak bu durum normal program yürütülmesi sırasında da meydana gelebilir. Bunu yapmak için "8" sayısını kullanın.
  • Minimum hata raporlaması yalnızca önemli çalışma zamanı hatalarının günlüğe kaydedilmesidir. Bunlar, bellek ayırma hataları vb. gibi betiğin kendisi tarafından düzeltilemeyen hatalardır. Bu durumda komut dosyasının yürütülmesi sonlandırılır. Bunu yapmak için “1” sayısını kullanın.
Elbette hangi hataları kaydetmek istediğinize ince ayar yapmak için diğer değerleri (“sayılar”) kullanabilirsiniz. Bu konuyla ilgili bazı açıklamalar en alttadır.

Hata kayıtlarınız için maksimum dosya boyutunu ayarlama
.htaccess kullanarak PHP hatalarınız için maksimum dosya boyutunu tanımlayabilirsiniz. Bu, bir bütün olarak dosyanın tamamının değil, kaydedilen her hatanın boyutunun izlenmesi anlamına gelir. Sözdizimi aşağıdaki gibidir.

Kod:
log_errors_max_len

Burada "tamsayı_sayı" yazılan her hata satırının bayt cinsinden maksimum boyutunu temsil eder. Varsayılan değer "1024"tür (yani 1 kilobayt). Bu sınırı kaldırmak için değeri “0” olarak ayarlayabilirsiniz. Lütfen bu değerin, etkinleştirildiğinde (örneğin geliştirme sırasında) görüntülenen hatalar için de geçerli olduğunu unutmayın.


Tekrarlanan hataların kaydedilmesini devre dışı bırakma
Hata günlüğüyle daha önce çalıştıysanız, yalnızca olayın gerçekleştiği zamana göre farklılık gösteren birçok benzer giriş içerdiğini fark etmiş olabilirsiniz. htaccess dosyanıza şu satırları ekleyerek bu fazlalıktan kurtulabilirsiniz.
Kod:
php_flag ignore_repeated_errors on
php_flag ignore_repeated_source on

Bu ayarlarla, farklı kaynaklarda veya adreslerde meydana gelse bile tekrarlanan hatalar oturum açma bilgilerine kaydedilmeyecektir. Yalnızca tek bir kaynaktan veya dosyadan gelen yinelenen hataları devre dışı bırakmak istiyorsanız, son satırı yorumlamanız veya silmeniz yeterlidir. Bunun tersine, olay günlüğü dosyanızın tüm yinelenen hataları içerdiğinden emin olmak için her iki değeri de açıktan kapalıya değiştirin. Hepsini bir araya getirirsek çalışma ortamı PHP hata kaydını ayarlama özelliklerini tartıştıktan sonra, tüm girdilerimizi tek bir .htaccess dosyasında toplayalım. Bu ayarlar çalışma ortamı için optimize edilmiştir.

Kod:
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /home/path/public_html/domain/PHP_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0

<Files PHP_errors.log>
     Order allow,deny
     Deny from all
     Satisfy All
</Files>

Açıklamalı kodun iyi bir stil olduğunu düşünüyorsanız, aynı kod ancak yorumlarla birlikte:

Kod:
php_flag display_startup_errors off


php_flag display_errors off


php_flag html_errors off


php_flag log_errors on


php_flag ignore_repeated_errors off

php_flag ignore_repeated_source off


php_flag report_memleaks on


php_flag track_errors on


php_value docref_root 0


php_value docref_ext 0


php_value error_log /home/path/public_html/domain/PHP_errors.log


php_value error_reporting -1

php_value log_errors_max_len 0


<Files PHP_errors.log>
     Order allow,deny
     Deny from all
     Satisfy All
</Files>

Yukarıdaki strateji, üretim ortamındaki genel bir sunucu için idealdir. Tüm hatalar meraklı gözlerden gizlenir, ancak yöneticiler ve programcılar için özenle toplanır. Elbette verilen yönergeleri ihtiyaçlarınıza mükemmel şekilde uyacak şekilde özelleştirebilirsiniz. Şimdi geliştirme ortamındaki hatalarla başa çıkmak için bir stratejiye bakalım.

Hepsini bir araya getirmek geliştirme ortamı
Bir programı geliştirirken veya hata ayıklarken, ortaya çıkan PHP hatalarını doğrudan tarayıcıdan gerçek zamanlı olarak izlemek daha uygundur. Geliştirme ortamına uygun ayarlara sahip bir .htaccess örneği aşağıda verilmiştir.

Kod:
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /home/path/public_html/domain/PHP_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0

<Files PHP_errors.log>
     Order allow,deny
     Deny from all
     Satisfy All
</Files>

Her satırı açıklamayacağız - ilgili açıklamaları biraz daha yukarıda görebilirsiniz.

İpuçları
PHP yöntemlerini kullanarak sunucudaki günlük dosyasının mutlak yolunu bulmak için (php_value error_log yönergesi için)
Kod:
echo dirname(__FILE__);

Bu talimatlara göre yüklenen Widnows üzerindeki bir sunucu için .htaccess örneği
Kod:
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log C:ServerdatahtdocsPHP_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0

<Files PHP_errors.log>
     Order allow,deny
     Deny from all
     Satisfy All
</Files>

Çalışmıyor
Bu yöntem PHP'nin CGI olarak çalıştığı barındırmalarda geçerli değildir
(olası çözümler bir sonraki makalede gösterilecektir).


Tüm PHP hatalarını görüntülemek için -1 ve ~0 php_value error_reporting
yönergesindetüm hataları görüntülemek için-1veya~0. Onlar. çizgiler şöyle görünür:

Kod:
php_value error_reporting -1
php_value error_reporting ~0

Örneğin, SADECE aşağıdaki E_ERROR (değer 1), E_WARNING (değer 2), E_CORE_ERROR (değer 16) hatalarını kaydetmek istiyorsak, karşılık gelen sayısal değeri elde etmek için bu değerleri ikili sayılara dönüştürmemiz gerekir ve karşılık gelen bitsel işlemleri gerçekleştirin ve ardından elde edilen sonucu ikili sayıyı ondalık sayıya dönüştürün. Ancak bu işlem basitleştirilebilir - sadece ondalık sayıların değerlerini ekleyin. Onlar. bizim durumumuzda 1+2+16=19
Kod:
php_value error_reporting 19

E_ERROR, E_WARNING ve E_CORE_ERROR hatalarını gösterecektir.
 

Öne Çıkan Konular