• 13-03-2025, 20:45:00
    #10
    Kodespa adlı üyeden alıntı: mesajı görüntüle
    Sanırım bu şekilde diyorsun doğru mu anladım bilmiyorum;

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
    // Gelen değeri debug için logla
    file_put_contents('debug-log.txt', "Gelen: " . var_export($config_value, true) . "\n", FILE_APPEND);
    
    // var_export ile güvenli PHP formatında değer oluştur
    $config_value_escaped = var_export($config_value, true);
    
    // Regex ile değiştirilecek deseni belirle
    $pattern = "/(\$cfg\['" . preg_quote($config_name, '/') . "'\]\s*=\s*)(['"])(.*?)(\2);/m";
    $replacement = "$1$config_value_escaped;";
    
    // Config dosyasındaki değeri değiştir
    $file_contents = preg_replace($pattern, $replacement, $file_contents);
    
    // Değiştirilmiş içeriği debug için kaydet
    file_put_contents('config-debug.php', $file_contents);
    }


    Eğer bundan bahsettiysen yine olmadı config içine aşağıdaki gibi yazdı şimfi de;
    $cfg['mysqlpassword'] = ''....@....'';
    Evet, doğru noktaya geldin ama küçük bir hata var.
    var_export($config_value, true) çıktısını doğrudan regex ile yerleştirince, çift tırnaklı bir değer tek tırnak içinde kalıyor; bu da hataya yol açıyor.

    Şu düzenlemeyi yap:

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        // Gelen değeri debug için logla
        file_put_contents('debug-log.txt', "Gelen: " . var_export($config_value, true) . "\n", FILE_APPEND);
    
        // var_export ile güvenli PHP formatında değer oluştur
        $config_value_escaped = var_export($config_value, true);
    
        // Çift tırnak ile başlıyorsa ve bitiyorsa tek tırnağa çevir
        if (strpos($config_value_escaped, '"') === 0 && strrpos($config_value_escaped, '"') === strlen($config_value_escaped) - 1) {
            $config_value_escaped = "'" . substr($config_value_escaped, 1, -1) . "'";
        }
    
        // Regex ile değiştirilecek deseni belirle
        $pattern = "/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)(['\"])(.*?)(\\2);/m";
        $replacement = "\$1$config_value_escaped;";
    
        // Config dosyasındaki değeri değiştir
        $file_contents = preg_replace($pattern, $replacement, $file_contents);
    
        // Değiştirilmiş içeriği debug için kaydet
        file_put_contents('config-debug.php', $file_contents);
    }
    Buradaki temel fark; var_export() çıktısını alıp, eğer çift tırnak ile başlıyorsa ve bitiyorsa tek tırnak içine alıyoruz. Böylece config dosyasına şu şekilde düzgün bir formatta yazılacak:

    $cfg['mysqlpassword'] = '....@$3....';
    Bunu bir dene; log dosyasına da bakarak tekrar kontrol edelim.
  • 13-03-2025, 20:52:23
    #11
    Lawliet adlı üyeden alıntı: mesajı görüntüle
    Evet, doğru noktaya geldin ama küçük bir hata var.
    var_export($config_value, true) çıktısını doğrudan regex ile yerleştirince, çift tırnaklı bir değer tek tırnak içinde kalıyor; bu da hataya yol açıyor.

    Şu düzenlemeyi yap:

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        // Gelen değeri debug için logla
        file_put_contents('debug-log.txt', "Gelen: " . var_export($config_value, true) . "\n", FILE_APPEND);
    
        // var_export ile güvenli PHP formatında değer oluştur
        $config_value_escaped = var_export($config_value, true);
    
        // Çift tırnak ile başlıyorsa ve bitiyorsa tek tırnağa çevir
        if (strpos($config_value_escaped, '"') === 0 && strrpos($config_value_escaped, '"') === strlen($config_value_escaped) - 1) {
            $config_value_escaped = "'" . substr($config_value_escaped, 1, -1) . "'";
        }
    
        // Regex ile değiştirilecek deseni belirle
        $pattern = "/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)(['\"])(.*?)(\\2);/m";
        $replacement = "\$1$config_value_escaped;";
    
        // Config dosyasındaki değeri değiştir
        $file_contents = preg_replace($pattern, $replacement, $file_contents);
    
        // Değiştirilmiş içeriği debug için kaydet
        file_put_contents('config-debug.php', $file_contents);
    }
    Buradaki temel fark; var_export() çıktısını alıp, eğer çift tırnak ile başlıyorsa ve bitiyorsa tek tırnak içine alıyoruz. Böylece config dosyasına şu şekilde düzgün bir formatta yazılacak:

    [PHPR]$cfg['mysqlpassword'] = '....@$3....';[/PHP]

    Bunu bir dene; log dosyasına da bakarak tekrar kontrol edelim.
    Yine olmadı debug dosyasında ise çıktı aşağıdaki gibi;

    Gelen: 'localhost'
    Gelen: '3306'
    Gelen: 'qwe'
    Gelen: ''....@$3....''
    Gelen: 'qwe'
  • 13-03-2025, 20:53:45
    #12
    Kodespa adlı üyeden alıntı: mesajı görüntüle
    Yine hüsran
    $cfg['mysqlpassword'] = "....@....";
    basit string işlemi kullandım son kez dener misin

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value) 
    {
        // Gelen değeri temizle
        $config_value = trim($config_value);
        
        // Değer boş string ise
        if ($config_value === '') {
            $config_value_escaped = "''";
        }
        // Değer tırnaklarla başlayıp bitiyorsa
        elseif (preg_match('/^(["\'])(.*)\1$/', $config_value, $matches)) {
            $content = $matches[2];
            if ($matches[1] === '"') {
                // Çift tırnaktan tek tırnağa çevir
                $config_value_escaped = "'" . str_replace("'", "\\'", $content) . "'";
            } else {
                // Tek tırnaktan çift tırnağa çevir
                $config_value_escaped = '"' . str_replace('"', '\\"', $content) . '"';
            }
        }
        // Tırnaksız gelen değer
        else {
            $config_value_escaped = "'" . str_replace("'", "\\'", $config_value) . "'";
        }
    
        // Basitleştirilmiş pattern
        $search = "\$cfg['$config_name'] = ";
        $pos = strpos($file_contents, $search);
        
        if ($pos !== false) {
            // Noktalı virgüle kadar olan kısmı bul
            $end_pos = strpos($file_contents, ';', $pos);
            if ($end_pos !== false) {
                $before = substr($file_contents, 0, $pos + strlen($search));
                $after = substr($file_contents, $end_pos);
                $file_contents = $before . $config_value_escaped . $after;
                return true;
            }
        }
        
        return false;
    }
  • 13-03-2025, 20:56:49
    #13
    Hugme adlı üyeden alıntı: mesajı görüntüle
    basit string işlemi kullandım son kez dener misin

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        // Gelen değeri temizle
        $config_value = trim($config_value);
        
        // Değer boş string ise
        if ($config_value === '') {
            $config_value_escaped = "''";
        }
        // Değer tırnaklarla başlayıp bitiyorsa
        elseif (preg_match('/^(["\'])(.*)\1$/', $config_value, $matches)) {
            $content = $matches[2];
            if ($matches[1] === '"') {
                // Çift tırnaktan tek tırnağa çevir
                $config_value_escaped = "'" . str_replace("'", "\\'", $content) . "'";
            } else {
                // Tek tırnaktan çift tırnağa çevir
                $config_value_escaped = '"' . str_replace('"', '\\"', $content) . '"';
            }
        }
        // Tırnaksız gelen değer
        else {
            $config_value_escaped = "'" . str_replace("'", "\\'", $config_value) . "'";
        }
    
        // Basitleştirilmiş pattern
        $search = "\$cfg['$config_name'] = ";
        $pos = strpos($file_contents, $search);
        
        if ($pos !== false) {
            // Noktalı virgüle kadar olan kısmı bul
            $end_pos = strpos($file_contents, ';', $pos);
            if ($end_pos !== false) {
                $before = substr($file_contents, 0, $pos + strlen($search));
                $after = substr($file_contents, $end_pos);
                $file_contents = $before . $config_value_escaped . $after;
                return true;
            }
        }
        
        return false;
    }

    Maalesef (((
    Şimdi de çift tırnak içine tek tırnağı almadı;

    $cfg['mysqlpassword'] = "....@$3....";
  • 13-03-2025, 20:58:21
    #14
    Kodespa adlı üyeden alıntı: mesajı görüntüle
    Maalesef (((
    Şimdi de çift tırnak içine tek tırnağı almadı;

    $cfg['mysqlpassword'] = "....@$3....";
    sizide yordum bu düzenlemeden sonra çalışmazsa iş ciddiye binecek

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value) 
    {
        // Gelen değeri temizle
        $config_value = trim($config_value);
        
        // Değer boş string ise
        if ($config_value === '') {
            $config_value_escaped = "''";
        }
        // Değer tırnaklarla başlayıp bitiyorsa
        elseif (preg_match('/^(["\'])(.*)\1$/', $config_value, $matches)) {
            $content = $matches[2];
            if ($matches[1] === '"') {
                // Çift tırnaktan tek tırnağa çevir
                $content = str_replace(['\\', '$', "'"], ['\\\\', '\\$', "\\'"], $content);
                $config_value_escaped = "'" . $content . "'";
            } else {
                // Tek tırnaktan çift tırnağa çevir
                $content = str_replace(['\\', '$', '"'], ['\\\\', '\\$', '\\"'], $content);
                $config_value_escaped = '"' . $content . '"';
            }
        }
        // Tırnaksız gelen değer
        else {
            $content = str_replace(['\\', '$', "'"], ['\\\\', '\\$', "\\'"], $config_value);
            $config_value_escaped = "'" . $content . "'";
        }
    
        // Config içeriğini güncelle
        $search = "\$cfg['$config_name'] = ";
        $pos = strpos($file_contents, $search);
        
        if ($pos !== false) {
            // Noktalı virgüle kadar olan kısmı bul
            $end_pos = strpos($file_contents, ';', $pos);
            if ($end_pos !== false) {
                $before = substr($file_contents, 0, $pos + strlen($search));
                $after = substr($file_contents, $end_pos);
                $file_contents = $before . $config_value_escaped . $after;
                return true;
            }
        }
        
        return false;
    }
  • 13-03-2025, 20:59:26
    #15
    Kodespa adlı üyeden alıntı: mesajı görüntüle
    Maalesef (((
    Şimdi de çift tırnak içine tek tırnağı almadı;

    $cfg['mysqlpassword'] = "....@$3....";
    Parolayı değişkene aktarıp dene.
  • 13-03-2025, 20:59:27
    #16
    Kodespa adlı üyeden alıntı: mesajı görüntüle
    Yine olmadı debug dosyasında ise çıktı aşağıdaki gibi;

    Gelen: 'localhost'
    Gelen: '3306'
    Gelen: 'qwe'
    Gelen: ''....@$3....''
    Gelen: 'qwe'
    Tamam, burada şifre değerine iki kat tırnak eklenmiş gibi görünüyor. var_export() kullanırken zaten tırnak eklediği için ekstra bir tırnak daha eklenmemesi gerekiyor.

    Bunu düzeltmek için şunu dene:

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        // Gelen değeri debug için logla
        file_put_contents('debug-log.txt', "Gelen: " . var_export($config_value, true) . "\n", FILE_APPEND);
    
        // var_export() çıktısından baştaki ve sondaki tırnakları temizle
        $config_value_escaped = var_export($config_value, true);
        
        if (preg_match('/^["\'](.*)["\']$/s', $config_value_escaped, $matches)) {
            $config_value_escaped = $matches[1]; // Tırnakları kaldır
        }
    
        // Son olarak, değeri tek tırnak içine al
        $config_value_escaped = "'" . addslashes($config_value_escaped) . "'";
    
        // Regex ile değiştirilecek deseni belirle
        $pattern = "/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)(['\"])(.*?)(\\2);/m";
        $replacement = "\$1$config_value_escaped;";
    
        // Config dosyasındaki değeri değiştir
        $file_contents = preg_replace($pattern, $replacement, $file_contents);
    
        // Değiştirilmiş içeriği debug için kaydet
        file_put_contents('config-debug.php', $file_contents);
    }
    - var_export() çıktısının başında ve sonunda zaten bir tırnak oluyordu. Bunları regex ile temizledim.
    Şifreyi sadece bir çift tırnak içine aldım ve kaçış karakterlerini düzgün işlemek için addslashes() kullandım.

    Bunu çalıştırınca config içine tam olarak şu şekilde yazması gerekiyor:

    $cfg['mysqlpassword'] = '....@$3....';
    Debug dosyasına da şu şekilde düşmesi lazım:

    Alıntı
    Gelen: localhost
    Gelen: 3306
    Gelen: qwe
    Gelen: ....@$3....
    Gelen: qwe
  • 13-03-2025, 21:02:35
    #17
    Hugme adlı üyeden alıntı: mesajı görüntüle
    sizide yordum bu düzenlemeden sonra çalışmazsa iş ciddiye binecek

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        // Gelen değeri temizle
        $config_value = trim($config_value);
        
        // Değer boş string ise
        if ($config_value === '') {
            $config_value_escaped = "''";
        }
        // Değer tırnaklarla başlayıp bitiyorsa
        elseif (preg_match('/^(["\'])(.*)\1$/', $config_value, $matches)) {
            $content = $matches[2];
            if ($matches[1] === '"') {
                // Çift tırnaktan tek tırnağa çevir
                $content = str_replace(['\\', '$', "'"], ['\\\\', '\\$', "\\'"], $content);
                $config_value_escaped = "'" . $content . "'";
            } else {
                // Tek tırnaktan çift tırnağa çevir
                $content = str_replace(['\\', '$', '"'], ['\\\\', '\\$', '\\"'], $content);
                $config_value_escaped = '"' . $content . '"';
            }
        }
        // Tırnaksız gelen değer
        else {
            $content = str_replace(['\\', '$', "'"], ['\\\\', '\\$', "\\'"], $config_value);
            $config_value_escaped = "'" . $content . "'";
        }
    
        // Config içeriğini güncelle
        $search = "\$cfg['$config_name'] = ";
        $pos = strpos($file_contents, $search);
        
        if ($pos !== false) {
            // Noktalı virgüle kadar olan kısmı bul
            $end_pos = strpos($file_contents, ';', $pos);
            if ($end_pos !== false) {
                $before = substr($file_contents, 0, $pos + strlen($search));
                $after = substr($file_contents, $end_pos);
                $file_contents = $before . $config_value_escaped . $after;
                return true;
            }
        }
        
        return false;
    }


    iş yoldan ççıktı zaten dün geceden beri denemediğim yönetm kalmadı
    Chatgpt ile de çözemedik

    $cfg['mysqlpassword'] = "....@$3....";
    bu arada yine olmadı ))
  • 13-03-2025, 21:05:38
    #18
    Lawliet adlı üyeden alıntı: mesajı görüntüle
    Tamam, burada şifre değerine iki kat tırnak eklenmiş gibi görünüyor. var_export() kullanırken zaten tırnak eklediği için ekstra bir tırnak daha eklenmemesi gerekiyor.

    Bunu düzeltmek için şunu dene:

    function cot_installConfigReplace(&$file_contents, $config_name, $config_value)
    {
        // Gelen değeri debug için logla
        file_put_contents('debug-log.txt', "Gelen: " . var_export($config_value, true) . "\n", FILE_APPEND);
    
        // var_export() çıktısından baştaki ve sondaki tırnakları temizle
        $config_value_escaped = var_export($config_value, true);
        
        if (preg_match('/^["\'](.*)["\']$/s', $config_value_escaped, $matches)) {
            $config_value_escaped = $matches[1]; // Tırnakları kaldır
        }
    
        // Son olarak, değeri tek tırnak içine al
        $config_value_escaped = "'" . addslashes($config_value_escaped) . "'";
    
        // Regex ile değiştirilecek deseni belirle
        $pattern = "/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)(['\"])(.*?)(\\2);/m";
        $replacement = "\$1$config_value_escaped;";
    
        // Config dosyasındaki değeri değiştir
        $file_contents = preg_replace($pattern, $replacement, $file_contents);
    
        // Değiştirilmiş içeriği debug için kaydet
        file_put_contents('config-debug.php', $file_contents);
    }
    - var_export() çıktısının başında ve sonunda zaten bir tırnak oluyordu. Bunları regex ile temizledim.
    Şifreyi sadece bir çift tırnak içine aldım ve kaçış karakterlerini düzgün işlemek için addslashes() kullandım.

    Bunu çalıştırınca config içine tam olarak şu şekilde yazması gerekiyor:

    $cfg['mysqlpassword'] = '....@$3....';
    Debug dosyasına da şu şekilde düşmesi lazım:
    Burada da şöyle birşey oluyor benim şifre tırnak ile başlıyor yani bizim sorun tırnağı olan bir şifre gelirse onu nasıl kaçıracağız çünkü config dosyasında tırnak içine alıyoruz ya db bilgilerini. şifre de tırnak ile başlayıp biterse nasıl çözeriz tartışması yapıyoruz