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.
Php'de kimseyi tanımam kralı benim diyenler
24
●1.662
- 13-03-2025, 22:52:28ilgili dosyaları inceleyebilmeniz için; https://files.rootali.net/index.php?...nti-0.9.25.refMisafir adlı üyeden alıntı: mesajı görüntüle
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, 02:13:04
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:49chatgpt 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
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Üstad cevap için teşekkür ederim ama konuyu bile unuttum nerede ne yapıyordum acaba hatırlamıyorumBarhalli adlı üyeden alıntı: mesajı görüntüle