5. Hata Ayıklama

DLE eklenti sisteminin en yanıltıcı özelliği şudur: hataların çoğu sessizdir. Kurulum "başarılı" der, panelde yeşil bir şey görünür, ama kodunuz çalışmaz. Bu sayfa, o sessizliği kırmak için hangi kaynağa bakmanız gerektiğini anlatır.

En büyük düşman: sessiz hata

Üç tür sessiz hata vardır ve üçü de farklı bir yerde saklanır:

BelirtiGerçek sebepNereye bakılır?
Eklenti kuruldu, hiçbir şey görünmüyor. Çapa tutmadı (yamalanacak satır bulunamadı) _plugins_logs (tip: file)
Dosya yaması hiç oluşmadı. Hedef dosya .php/.lng değil, veya giriş noktası (index.php, admin.php, cron.php) Hiçbir yere — uyarı yok
Kurulumda veritabanı hatası. mysqlinstall içindeki SQL bozuk veya yer tutucu yanlış _plugins_logs (tip: mysql)

Adım 1 — PHP hatalarını görünür yapın

DLE, varsayılan olarak PHP hatalarını gizler. Geliştirme yaparken bunu açmanız şarttır:

  1. Sistem Ayarları'nı açın Yönetim Paneli → Sistem Ayarları bölümüne gidin.
  2. "PHP hatalarını göster" seçeneğini işaretleyin Bu seçenek display_php_errors ayarını 1 yapar ve DLE display_errors'ı açar.
  3. İşiniz bitince kapatın Canlı sitede bırakmak, dosya yollarını ve sunucu bilgilerini ziyaretçilere gösterir.
!
Bu ayar uyarıları göstermeye YETMEZ DLE ayrıca error_reporting maskesini şu şekilde ayarlar: E_ALL & ^E_WARNING & ^E_DEPRECATED & ^E_NOTICE. Yani uyarılar, notice'lar ve deprecated mesajları hata raporlama seviyesinden çıkarılmıştır. Gösterme ayarını açsanız bile bunlar görünmez.

Geliştirme sırasında tamamını görmek için kendi modül dosyanızın en başına geçici olarak şunu ekleyin:

if (!defined('DATALIFEENGINE')) die('Hacking attempt!');

// GELİŞTİRME SIRASINDA — yayına almadan ÖNCE silin
@ini_set('display_errors', '1');
@error_reporting(E_ALL);

Adım 2 — Panel uyarısını takip edin

_plugins_logs tablosunda tek bir kayıt bile varsa, yönetim panelinin ana sayfasında kırmızı bir uyarı kutusu belirir ve sizi doğrudan hata listesine götüren bir düğme gösterir. Eklenti geliştirirken bu uyarıyı her kurulumdan sonra kontrol etmeyi alışkanlık hâline getirin.

"Hataları göster" ekranı

Kayıtları okumanın resmî yolu:

Yönetim Paneli → Eklentiler → Hataları göster # Adres olarak: admin.php?mod=plugins&action=errors # Tek bir eklentiye odaklanmak için: admin.php?mod=plugins&action=errors&id=<eklenti_id>

Bu ekranda her kayıt için şunlar görünür:

  • Eklenti adı — hatanın hangi eklentiden geldiği,
  • Alan (area) — hata bir dosya yamasıysa hedef dosya yolu,
  • Hata metni — dosya yamasında, çapanın (searchcode) kendisi; SQL'de, veritabanının döndürdüğü hata,
  • Tür (type) — file, mysql veya upload.

_plugins_logs tablosu

Sütunİçerik
idOtomatik artan kayıt numarası.
plugin_idHatanın ait olduğu eklenti. 0 ise kayıt eklenti dışı bir sistem sorunudur.
areaHatanın oluştuğu yer: hedef dosya yolu veya klasör uyarısı metni.
errorHata metni: bulunamayan çapa veya SQL hatası.
typefile · mysql · upload
action_idHangi yama kaydından geldiği (dosya hataları için).

type değerleri ne anlatır?

typeAnlamı
file Dosya yaması uygulanamadı — çapa bulunamadı. error sütununda aradığınız metin durur. Ayrıca engine/cache/system/plugins/ klasörü yazılamıyorsa plugin_id = 0 ile bir kayıt düşer ("Unable to save plugins to /engine/cache/system/plugins/…").
mysql mysqlinstall / mysqlupgrade / mysqlenable / mysqldisable / mysqldelete bloklarından biri hata verdi. area başarısız SQL'i, error veritabanı mesajını içerir.
upload ZIP kurulumu sırasında dosya çıkarma/güvenlik denetimi hatası. Genellikle ZIP yapısı bozuk ya da dosya yolu geçersiz demektir.

Hata → Sebep → Çözüm

BelirtiSebepÇözüm
Hataları göster ekranında "dosya yolu + çapa metni" Çapa dosyada bulunamadı. Çapayı kaynaktan yeniden kopyalayın. Ayrıntı: Çapa Sanatı.
Kırmızı kutu: "Unable to save plugins…" engine/cache/system/plugins/ yazılamıyor. Klasörü oluşturun ve engine/cache/system/ ile birlikte 777 yapın.
Eklenti kuruldu ama pasif görünüyor dleversion + versioncompare uyuşmadı veya needplugin ile beklediği eklenti yok. Sürüm kapısını gevşetin ya da eksik bağımlılığı kurun.
Yama diske yazıldı ama kod çalışmıyor Hedef dosya Check() ile yüklenmiyor (giriş noktası) veya yama enabled=0. Hedefi engine/init.php gibi yamalanabilir bir dosyaya taşıyın.
Kod bir kez değil, onlarca kez çalışıyor Çapa benzersiz değil ve searchcount verilmemiş. <searchcount>1</searchcount> ekleyin.
Şablon/CSS değişikliği hiç uygulanmadı .tpl, .css, .js yamalanamaz. Bu dosyaları ZIP içinde normal dosya olarak gönderin.
Beyaz sayfa (hiç çıktı yok) Modülünüzde PHP ölümcül hata var, hata gizli. Sistem Ayarları'ndan PHP hatalarını açın; sunucunun error_log dosyasına bakın.
mysql tipi kayıt: tablo yok Eklenti güncellendi; mysqlinstall güncellemede çalışmaz. Tablo oluşturmayı mysqlupgrade içine de yazın.

Kayıtlar ne zaman silinir?

Hata kayıtlarının ömrünü bilmek önemlidir; çünkü eskimiş kayıtlar sizi yanlış yönlendirir.

  • Tüm type = 'file' kayıtları, her önbellek yenilenmesinde baştan silinir. Yani eklentiyi yeniden kurduğunuzda eski "çapa bulunamadı" kayıtları temizlenir ve güncel durumu görürsünüz.
  • Bir eklenti silindiğinde, o eklentiye ait tüm kayıtlar silinir.
  • mysql ve upload tipi kayıtlar, siz elle temizleyene kadar kalır.
★
Emin olamıyorsanız kayıtları temizleyin Eklenti sayfasındaki kayıt temizleme işlemiyle listeyi boşaltın, sonra eklentiyi yeniden kurun. Böylece yalnızca yeni kurulumun ürettiği hataları görürsünüz.

Pratik hata ayıklama akışı

  1. PHP hatalarını açın Sistem Ayarları → PHP hatalarını göster.
  2. Eklentiyi yeniden kurun Manifesti yeniden yükleyin — bu, önbelleği ve eski file kayıtlarını temizler.
  3. Hataları göster ekranını açın Kayıt varsa area ve error sütunları size tam olarak nerede ve neyin arandığını söyler.
  4. Hedef dosyayı doğrulayın Çapayı metin düzenleyicide hedef dosyada aratın. Bulunamıyorsa DLE sürümünüzde satır değişmiş demektir.
  5. Kodun çalıştığını kanıtlayın Kodun en başına geçici bir file_put_contents(ROOT_DIR.'/test.log', "calisti\n", FILE_APPEND); ekleyin. Bu satır görünüyorsa yama çalışıyor demektir — sorun kodun geri kalanındadır.

Yapmayın

  • Hata ayıklamayı echo ile yapmayın. Modülünüz sayfanın ortasına çıktı basarsa HTML yapısı bozulur ve gerçek sorunu göremezsiniz. Dosyaya yazın (file_put_contents), sonra silin.
  • Canlı sitede display_errors bırakmayın. Sunucu yolları ve sürüm bilgileri ziyaretçilere sızar.
  • Hedef dosyayı elle düzenlemeyin. Yamalı kopya önbellekte durur; orijinali değiştirirseniz bir sonraki önbellek yenilemesinde değişikliğiniz kaybolur. Tüm değişiklikleri manifest üzerinden yapın.
  • Korumalı dosyaları yamalamaya çalışmayın. Kurulum hata verir: engine/classes/mysql.php, plugins.class.php ve engine/data/ altındaki config, dbconfig, socialconfig, videoconfig.

Hata ayıklama kontrol listesi

  • PHP hatalarını gösterme ayarı açık (geliştirme sırasında).
  • error_reporting gerekiyorsa E_ALL yapıldı.
  • Panel ana sayfasındaki kırmızı uyarı kutusu kontrol edildi.
  • Hataları göster ekranı okundu; type sütununa göre doğru bölüme bakıldı.
  • Sunucunun error_log dosyası da kontrol edildi (beyaz sayfa durumunda).
  • Geçici hata ayıklama satırları silindi.

Toplu bir tuzak listesi için: Sık Yapılan Hatalar.