"Deprecated: str_replace(): Passing null to parameter" hatası
Herkese merhaba.
Aşağıdaki hatayı alıyorum, sorunu nasıl çözebilirim.
Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
PHP Sürümüm 8.2.13
<?php
$patterns = [
'{url}' => '([0-9a-zA-Z]+)',
'{id}' => '([0-9]+)'
];
$url = str_replace(array_keys($patterns), array_values($patterns), $url);
// Şu şekilde denedim ama yine aynı hatayı alıyorum.
$url = $url ? str_replace(array_keys($patterns), array_values($patterns), $url) : "";
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (5)
@ebykdrms'de dedigi gibi, artik str_replace'de 2. parametrede null
kullanimi kaldirildi, onun yerine bos string olarak degistirirsen problemin cozulecektir.
kisaca projendeki butun su sekilde olan kodlarini:
str_replace($needle, null, $haystack)
soyle degistirmen gerekiyor:
str_replace($needle, '', $haystack)
Gecen PHP'nin yeni surumune gecerken ben de ayni problemi yasadim, uzucu :D eger 3. parti kullandigin class'lar vs. varsa onlarda hata cikarabilir, onlara da bir el atman gerekebilir.
Passing null to parameter #2 ($replace) of type array|string is deprecated.
Yani, 2. parametreye null gelmesi PHP 8 ile artık kaldırıldı. Önceki sürümlerde null verilirse boş string olarak kabul ediliyordu muhtemelen.
Hatayı aslında şu satırda alıyorsunuz:
$request_uri = str_replace([$dirname, $basename], null, $_SERVER['REQUEST_URI']);
Burada null
olan parametre array veya string olmalı. Şu şekilde düzeltilebilir:
$request_uri = str_replace([$dirname, $basename], '', $_SERVER['REQUEST_URI']);
Bunu yaptığınızda $_SERVER['REQUEST_URI']
içinde geçen $dirname
veya $basename
ifadelerininin silinmiş halini $request_uri
değişkenine atayacaktır.
gokcin hocam url bir fonksiyon üzerinden geliyor.
Tam kodum şu şekilde.
<?php
$route = 0;
function parseUrl()
{
$dirname = dirname($_SERVER['SCRIPT_NAME']);
$dirname = $dirname != '/' ? $dirname : null;
$basename = basename($_SERVER['SCRIPT_NAME']);
$request_uri = str_replace([$dirname, $basename], null, $_SERVER['REQUEST_URI']);
return $request_uri;
}
function run($url, $callback, $methods = 'get')
{
$methods = explode('|', strtoupper($methods));
if (in_array($_SERVER['REQUEST_METHOD'], $methods))
{
$patterns = [
'{url}' => '([0-9a-zA-Z]+)',
'{id}' => '([0-9]+)'
];
$url = $url ? str_replace(array_keys($patterns), array_values($patterns), $url) : "";
$request_uri = parseUrl();
if (preg_match('@^' . $url . '$@', $request_uri, $parameters))
{
unset($parameters[0]);
global $route;
$route += 1;
if (is_callable($callback)){
call_user_func_array($callback, $parameters);
} else {
$explode = explode('@', $callback); // $callback'i controller ve method olacak şekilde parçala.
$controller = explode('/', $explode[0]); // controller klasöründe bulunan klasör içerisindeki dosya ismini alabilmek için parçala
$controller = end($controller); // Dosya ismini al
$method = $explode[1]; // Method ismi
$controllerFile = CONTROLLERS_DIR . strtolower($explode[0]) . '.php';
if (file_exists($controllerFile)) {
require $controllerFile;
controller($controller, $method, $parameters);
}else{
echo $controller." dosyası bulunamadı!";
}
}
}
}
}
function notfound()
{
global $route;
if($route == 0)
{
header('Location: '.URL.'/404');
}
}
Örnek run fonksiyonu kullanımı
run("/blog/goster/{id}","blog@tek_blog");
<?php
$patterns = [
'{url}' => '([0-9a-zA-Z]+)',
'{id}' => '([0-9]+)'
];
// Önce $url değişkenini tanımlayın veya güncelleyin
$url = "your_actual_url_here";
// Ardından yer tutucuları (placeholders) değiştirin
$url = $url ? str_replace(array_keys($patterns), array_values($patterns), $url) : "";
// Şimdi $url değişkeni, yer tutucuların uygun değerleriyle güncellenmiş olacak
echo $url;
?>