18. Doğrulama Araçları
DLE eklentilerindeki hataların çoğu sessizdir. Bu yüzden "kurdum, çalışıyor gibi görünüyor" demek yeterli değildir. Bu sayfa, yayına almadan önce kullanabileceğiniz denetim yöntemlerini sıralar.
1. DLE'nin kendi araçları
Kurulumdan hemen sonra şu üç yeri kontrol edin:
| Araç | Nerede? | Ne söyler? |
|---|---|---|
| PHP hatalarını göster | Sistem Ayarları → ilgili onay kutusu | Ölümcül PHP hatalarını ve çalışma zamanı sorunlarını görünür yapar. |
| Hataları göster | Eklentiler → Hataları göster | Tutmayan çapaları ve başarısız SQL bloklarını listeler. |
| Panel ana sayfa uyarısı | Yönetim Paneli ana sayfası | Tek bir hata kaydı bile varsa kırmızı bir kutu gösterir. |
XML error: <mesaj> at line <satır> biçiminde bir hata gösterir.
Bu, dosyanın ayrıştırılamadığı anlamına gelir — genellikle kaçırılmamış bir
& veya kapatılmamış bir etiket yüzündendir.
2. Çapa denetleyici — kendi aracınız
Bu, en çok zaman kazandıran araçtır. Kurulum yapmadan önce, manifestinizdeki
her çapanın hedef dosyada gerçekten bulunduğunu söyler. DLE'nin
prepare_search() mantığının aynısını kullanır; yani DLE neyi arıyorsa onu arar.
Aşağıdaki dosyayı anchor-check.php olarak kaydedin ve
DLE kurulu bir sitede komut satırından çalıştırın:
// Kullanim: php anchor-check.php eklentim.xml /sitenin/kok/dizini
if (PHP_SAPI !== 'cli') die('Bu araç yalnızca komut satırında çalışır.');
$xmlPath = isset($argv[1]) ? $argv[1] : '';
$root = isset($argv[2]) ? rtrim($argv[2], '/') : '';
if (!$xmlPath || !$root || !is_file($xmlPath)) {
die("Kullanim: php anchor-check.php eklentim.xml /sitenin/kok/dizini\n");
}
/** DLE'nin DLEPlugins::prepare_search() metoduyla AYNI regex'i üretir. */
function dle_search_regex($code)
{
$safe = array();
foreach (explode("\n", trim($code)) as $line) {
if (trim($line)) {
$safe[] = preg_replace("/\s+/u", "\s*", preg_quote(trim($line), '#'));
}
}
if (!$safe) return null;
return '#' . implode("\s*", $safe) . '#siu';
}
$xml = @simplexml_load_file($xmlPath);
if (!$xml) {
die("Manifest ayrıştırılamadı. XML söz dizimini kontrol edin.\n");
}
$problems = 0;
$checked = 0;
foreach ($xml->file as $file) {
$name = (string)$file->attributes()->name;
$target = $root . '/' . $name;
if (!is_file($target)) {
echo "DOSYA YOK : $name\n";
$problems++;
continue;
}
$src = file_get_contents($target);
foreach ($file->operation as $op) {
$action = (string)$op->attributes()->action;
// Bu iki action çapayı yok sayar; denetlenecek bir şey yok.
if ($action === 'create' || $action === 'replaceall') {
echo "ATLANDI (tümünü yazar) : [$action] $name\n";
continue;
}
$anchor = (string)$op->searchcode;
$count = (string)$op->searchcount;
$regex = dle_search_regex($anchor);
if (!$regex) {
echo "ÇAPA BOŞ : [$action] $name\n";
$problems++;
continue;
}
$hits = preg_match_all($regex, $src);
$checked++;
if ($hits === 0) {
echo "TUTMADI : [$action] $name\n";
echo " aranan : " . trim($anchor) . "\n";
$problems++;
} elseif ($hits > 1 && !$count) {
echo "RİSKLİ ($hits kez) : [$action] $name -> searchcount ekleyin\n";
echo " aranan : " . trim($anchor) . "\n";
$problems++;
} else {
echo "tamam ($hits eşleşme) : [$action] $name\n";
}
}
}
echo "\n----------------------------------------\n";
echo $problems
? "$problems sorun bulundu ($checked çapa denetlendi).\n"
: "Tüm çapalar tutuyor ($checked çapa denetlendi).\n";
exit($problems ? 1 : 0);
Örnek çıktı:
1'dir. Böylece paketleme betiğinizde bu denetimi
zorunlu tutabilirsiniz: sorun varsa paket çıkmaz.
3. Manifestin yapısal denetimi
Kurulumdan önce şunları elle doğrulayın:
| Kontrol | Neden? |
|---|---|
<name> dolu ve başka bir eklentiyle aynı değil | Boş veya yinelenen ad kurulumu durdurur. |
Her <file> yolu .php veya .lng ile bitiyor | Diğer uzantılar sessizce atlanır. |
Hiçbir <file> korumalı listede değil | Kurulum hata vererek durur. |
Hiçbir <file> giriş noktası değil | Yama yazılır ama hiç çalışmaz. |
PHP bloklarında <?php etiketi yok | Bloklar eval() ile çalışır. |
versioncompare izinli değerlerden biri | Tanınmayan değer sürüm kapısını sessizce kapatır. |
action beş izinli değerden biri | Diğerleri hiç işlenmez. |
| XML iyi biçimli (well-formed) | Bozuk XML'de kurulum başlamaz. |
<![CDATA[ ... ]]> blokları içinde <, > ve
& serbesttir. Ama CDATA dışındaki alanlarda (örn.
<description>) & karakterini
& olarak yazmanız gerekir. En sık yapılan XML hatası budur.
4. Yaşam döngüsü test matrisi
Bir eklenti "kurulunca çalışıyor" demekle bitmez. Beş ayrı senaryoyu test etmelisiniz; çünkü DLE her birinde farklı blokları çalıştırır:
| Senaryo | Çalışan bloklar | Beklenti |
|---|---|---|
| İlk kurulum | mysqlinstall, phpinstall (+ aktifse *enable) |
Tablo oluşur, eklenti aktif görünür. |
| Aynı eklentiyi tekrar yükleme (güncelleme) | mysqlupgrade, phpupgrade |
Tablo korunur, yeni alanlar eklenir. Kayıt kaybı olmaz. |
| Pasife alma | mysqldisable, phpdisable |
Site etkilenmez; eklenti artık yamalanmaz. |
| Yeniden etkinleştirme | mysqlenable, phpenable |
Eklenti eskisi gibi çalışır; veriler yerinde kalır. |
| Silme | mysqldelete, phpdelete, önbellek temizliği |
Tablolar düşer, eklenen dosyalar silinir, menü kaydı kalkar. |
5. Uyumluluk testleri
- Sürüm kapısı: DLE sürümü uyuşmadığında eklenti pasif kurulur,
hata vermez. Bunu kasıtlı olarak farklı bir
dleversionile deneyin. - Birden fazla eklenti: Sizin eklentinizle aynı dosyaya (özellikle
engine/modules/main.php) yama yapan bir eklenti daha kurup sırayı test edin. - Dil dosyaları: Yönetim paneli metinleri
adminpanel.lng, ön yüz metinleriwebsite.lngiçine gider. İkisini karıştırmayın. - Temiz kurulum: DLE'yi sıfırdan kurup eklentiyi ilk siz yükleyerek deneyin. Var olan bir tabloya/satıra güvenmek, başka sitelerde kırılmanıza yol açar.
- Farklı tema: Kendi teması olan bir sitede şablon bloğunuzun göründüğünü doğrulayın.
Yayın öncesi kontrol listesi
-
Çapaları önceden denetleyin
anchor-check.phpile tüm çapaların tuttuğunu ve benzersiz olduğunu doğrulayın. - Temiz DLE'ye kurun Hataları göster ekranı boş olmalı.
- Güncellemeyi test edin Aynı ZIP'i ikinci kez yükleyin; verilerin korunduğunu görün.
- Pasif/aktif döngüsünü test edin Kapatın, siteyi kontrol edin, açın, tekrar kontrol edin.
- Silin ve kalıntı bırakmadığını doğrulayın Tablo, ayar kaydı ve menü girdisi kalmamalı.
- PHP hatalarını kapatın Sistem Ayarları'ndan hata göstermeyi kapatıp yayınlayın.
Tuzak listesinin tamamı için: Sık Yapılan Hatalar.