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:
| Belirti | Gerçek sebep | Nereye 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:
- Sistem Ayarları'nı açın Yönetim Paneli → Sistem Ayarları bölümüne gidin.
-
"PHP hatalarını göster" seçeneğini işaretleyin
Bu seçenek
display_php_errorsayarını1yapar ve DLEdisplay_errors'ı açar. - İşiniz bitince kapatın Canlı sitede bırakmak, dosya yollarını ve sunucu bilgilerini ziyaretçilere gösterir.
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:
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,mysqlveyaupload.
_plugins_logs tablosu
| Sütun | İçerik |
|---|---|
id | Otomatik artan kayıt numarası. |
plugin_id | Hatanın ait olduğu eklenti. 0 ise kayıt eklenti dışı bir sistem sorunudur. |
area | Hatanın oluştuğu yer: hedef dosya yolu veya klasör uyarısı metni. |
error | Hata metni: bulunamayan çapa veya SQL hatası. |
type | file · mysql · upload |
action_id | Hangi yama kaydından geldiği (dosya hataları için). |
type değerleri ne anlatır?
| type | Anlamı |
|---|---|
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
| Belirti | Sebep | Çö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.
mysqlveuploadtipi kayıtlar, siz elle temizleyene kadar kalır.
Pratik hata ayıklama akışı
- PHP hatalarını açın Sistem Ayarları → PHP hatalarını göster.
-
Eklentiyi yeniden kurun
Manifesti yeniden yükleyin — bu, önbelleği ve eski
filekayıtlarını temizler. -
Hataları göster ekranını açın
Kayıt varsa
areaveerrorsütunları size tam olarak nerede ve neyin arandığını söyler. - 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.
-
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ı
echoile 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_errorsbı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.phpveengine/data/altındakiconfig,dbconfig,socialconfig,videoconfig.
Hata ayıklama kontrol listesi
- PHP hatalarını gösterme ayarı açık (geliştirme sırasında).
error_reportinggerekiyorsaE_ALLyapıldı.- Panel ana sayfasındaki kırmızı uyarı kutusu kontrol edildi.
- Hataları göster ekranı okundu;
typesütununa göre doğru bölüme bakıldı. - Sunucunun
error_logdosyası 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.