• 13-03-2025, 22:02:53
    #19
    Bu dosyayı tetikleyen include require vs dosya var
    Orda güvenlik amaçlı fonksiyon var ve special charslari süzüyor onu bulup replece ederseniz sorun çözülür.
    • echelon
    echelon bunu beğendi.
    1 kişi bunu beğendi.
  • 13-03-2025, 22:52:28
    #20
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Bu dosyayı tetikleyen include require vs dosya var
    Orda güvenlik amaçlı fonksiyon var ve special charslari süzüyor onu bulup replece ederseniz sorun çözülür.
    ilgili dosyaları inceleyebilmeniz için; https://files.rootali.net/index.php?...nti-0.9.25.ref
    Tüm kurulum dosylarına buradan erişebilirsiniz.

    İlgili kurulum modülü ise: modules/install/inc/install.functions.php içinde yer alıyor diğer dosyalara da bakabilirsiniz.

    Ben başaramadım yapabilen varsa tecrübesiyle aydınlatırsa sevinirim
  • 14-03-2025, 00:45:00
    #21
    $password = <<<'EOT'
    '....@....'
    EOT;
  • 14-03-2025, 02:13:04
    #22
    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        file_put_contents('debug-log.txt', "GELEN DEĞER: $config_value\n", FILE_APPEND);
        
        // Şifre içinde çift tırnak varsa kaçış yap
        $config_value_escaped = '"' . addslashes($config_value) . '"';
        
        file_put_contents('debug-log.txt', "DÜZENLENEN ŞİFRE: $config_value_escaped\n", FILE_APPEND);
    
        $file_contents = preg_replace(
            "/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)('|\").*?\\2;/m",
            "\$1$config_value_escaped;",
            $file_contents
        );
    
        file_put_contents('config-debug.php', $file_contents);
    }
    $config_value = str_replace('@', '\\@', $config_value);
    Bunu addslashes() ile birlikte kullanırsan, @ işaretinin düzgün şekilde dosyaya yazıldığından emin olabilirsin.
    file_put_contents('test-config.php', "\$cfg['mysqlpassword'] = \"$config_value_escaped\";\n");
    Bu dosyayı açarak sonucu kontrol edebilirsin. Eğer yanlış yazılıyorsa, yazılmadan önceki debug-log.txt içeriğini inceleyerek şifrenin nasıl işlendiğini görebilirsin.
  • 14-03-2025, 11:06:49
    #23
    chatgpt cevabı hocam



    Sorunun temel kaynağı, MySQL şifresinde özel karakterler (@, $, " veya ') bulunması ve bunların yanlış kaçışlanması nedeniyle bağlantının başarısız olması gibi görünüyor.

    Kodunuzu incelediğimde birkaç kritik hata fark ettim:

    Şifre kaçış karakterleri doğru işlenmiyor:

    addslashes() fonksiyonunu kullanıyorsunuz ama MySQL şifreleri için özel karakterler farklı şekillerde ele alınabilir.
    Eğer şifre " veya ' ile başlıyorsa ve bitiyorsa, sadece bunları değiştirmek yetmez.
    MySQL bağlantısı sırasında @ gibi karakterlerin yanlış yorumlanmasını engellemek için uygun bir kaçış işlemi yapılmalı.
    preg_replace() düzenli ifadesi yanlış çalışıyor olabilir:

    $cfg['mysqlpassword'] satırındaki değeri değiştirirken, mevcut karakter sınırlamalarına dikkat edilmeli.
    Çözüm
    Kodunuzu aşağıdaki şekilde güncelleyerek sorunu çözebilirsiniz:

    Düzeltilmiş cot_installConfigReplace Fonksiyonu
    Bu fonksiyon:

    Gelen config_value içinde özel karakterleri doğru şekilde işliyor.
    Eğer şifre " veya ' ile çevriliyorsa, uygun şekilde saklıyor.
    preg_replace() kullanırken değeri güvenli bir biçimde değiştiriyor.



    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        file_put_contents('debug-log.txt', "GELEN DEĞER: $config_value\n", FILE_APPEND);
    
        // Özel karakterleri doğru şekilde kaçışlamak için
        $config_value_clean = str_replace(['\\', '\''], ['\\\\', '\\\''], $config_value);
    
        if (strpos($config_value, '"') === 0 && strrpos($config_value, '"') === strlen($config_value) - 1) {
            $config_value_escaped = "'" . $config_value_clean . "'";
        } elseif (strpos($config_value, "'") === 0 && strrpos($config_value, "'") === strlen($config_value) - 1) {
            $config_value_escaped = '"' . $config_value_clean . '"';
        } else {
            $config_value_escaped = "'" . $config_value_clean . "'";
        }
    
        file_put_contents('debug-log.txt', "DÜZENLENEN ŞİFRE: $config_value_escaped\n", FILE_APPEND);
    
        // Güncellenmiş satırı config içine yazma
        $pattern = "/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)('|\")(.*?)\\2;/m";
        $replacement = "\$1$config_value_escaped;";
        $file_contents = preg_replace($pattern, $replacement, $file_contents);
    
        file_put_contents('config-debug.php', $file_contents);
    }
    Neden Bu Çözüm Çalışır?
    Kaçışlama Sorununu Giderir: str_replace() ile özel karakterleri düzgün kaçışlar.
    Güvenli ve Esnek Kullanım: Şifre "..." veya '...' formatında ise uygun şekilde değiştirilir.
    Config Dosyasında Doğru Güncelleme: preg_replace() ifadesi, PHP konfigürasyon satırlarını doğru şekilde değiştirir.
    Bu şekilde MySQL bağlantısının başarılı olması gerekiyor. Denedikten sonra hala hata alıyorsanız, debug-log.txt içeriğini kontrol edip geri dönüş yapabilirsiniz.
  • 16-03-2025, 01:51:02
    #24
    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        // Debug amaçlı log alalım
        file_put_contents('debug-log.txt', "GELEN DEĞER: $config_value\n", FILE_APPEND);
    
        // Eğer gelen değer en başta ve sonda çift tırnak veya tek tırnakla başlıyorsa onları at.
        if (
            (substr($config_value, 0, 1) === '"' && substr($config_value, -1) === '"') ||
            (substr($config_value, 0, 1) === "'" && substr($config_value, -1) === "'")
        ) {
            // dıştaki tırnakları kırp
            $config_value = substr($config_value, 1, -1);
        }
    
        // PHP'de güvenli şekilde tek tırnak içinde yazmak için kaçışla
        $config_value_escaped = addslashes($config_value);
    
        // Şimdi konfig satırını bulup yenisiyle değiştirelim
        $pattern = "/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)('|\").*?\\2;/m";
        // Değiştirme yaparken daima tek tırnak kullanalım
        $replacement = "\$1'$config_value_escaped';";
        $file_contents = preg_replace($pattern, $replacement, $file_contents);
    
        // Son halini de debug amaçlı kaydet
        file_put_contents('debug-log.txt', "DÜZENLENEN ŞİFRE: '$config_value_escaped'\n", FILE_APPEND);
        file_put_contents('config-debug.php', $file_contents);
    }
    bunu bir dener misin?
  • 23-01-2026, 16:46:46
    #25
    Barhalli adlı üyeden alıntı: mesajı görüntüle
    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        // Debug amaçlı log alalım
        file_put_contents('debug-log.txt', "GELEN DEĞER: $config_value\n", FILE_APPEND);
    
        // Eğer gelen değer en başta ve sonda çift tırnak veya tek tırnakla başlıyorsa onları at.
        if (
            (substr($config_value, 0, 1) === '"' && substr($config_value, -1) === '"') ||
            (substr($config_value, 0, 1) === "'" && substr($config_value, -1) === "'")
        ) {
            // dıştaki tırnakları kırp
            $config_value = substr($config_value, 1, -1);
        }
    
        // PHP'de güvenli şekilde tek tırnak içinde yazmak için kaçışla
        $config_value_escaped = addslashes($config_value);
    
        // Şimdi konfig satırını bulup yenisiyle değiştirelim
        $pattern = "/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)('|\").*?\\2;/m";
        // Değiştirme yaparken daima tek tırnak kullanalım
        $replacement = "\$1'$config_value_escaped';";
        $file_contents = preg_replace($pattern, $replacement, $file_contents);
    
        // Son halini de debug amaçlı kaydet
        file_put_contents('debug-log.txt', "DÜZENLENEN ŞİFRE: '$config_value_escaped'\n", FILE_APPEND);
        file_put_contents('config-debug.php', $file_contents);
    }
    bunu bir dener misin?
    Üstad cevap için teşekkür ederim ama konuyu bile unuttum nerede ne yapıyordum acaba hatırlamıyorum