Şifre içinde özel karakterler (@, $, \) olduğu için config dosyasına düzgün şekilde yazılamıyor. Muhtemelen addslashes() yeterli gelmiyor veya yanlış yerde kullanılıyor.
Sorunun temelinde, şifreyi PHP koduna yazarken kaçış karakterlerinin doğru şekilde işlenmemesi yatıyor.
addslashes() yerine, var_export() kullanmayı dene. var_export(), değeri doğrudan PHP koduna uygun şekilde yazmana yardımcı olur:
$config_value_escaped = var_export($config_value, true);
Bu şekilde PHP'nin kendi kurallarına uygun olarak tırnakları ayarlamasını sağlayabilirsin.
preg_replace() kullanımında regex'in $cfg['mysqlpassword'] değerini düzgün değiştirdiğinden emin olmak için şunu deneyebilirsin:
$file_contents = preg_replace(
"/(\\\$cfg\\['" . preg_quote($config_name, '/') . "'\\]\\s*=\\s*)(['\"])(.*?)(\\2);/m",
"\$1$config_value_escaped;",
$file_contents
);Burada (.*?) yerine, .*? kullanarak mevcut değeri daha güvenli şekilde yakalıyoruz.
Debug için, şifrenin cot_installConfigReplace() fonksiyonuna nasıl ulaştığını kontrol etmek için şu satırı ekleyebilirsin:
file_put_contents('debug-log.txt', "Gelen: " . var_export($config_value, true) . "\n", FILE_APPEND);Bunları dene. Hâlâ çözülmezse, fonksiyonun tam çağrıldığı yeri ve config.php dosyasının formatını kontrol etmek gerek.