PHP str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated

Viewed 16322

I'm getting this error while running my app:

PHP str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated

I am Using CodeIgniter Version : V4.1.8 PHP Version : 8.1.2, full error output below:

{"data":[
    ["omron","<span class=\"label label-success\">Active<\/span>",
    "<button type=\"button\" class=\"btn btn-default\" onclick=\"editBrand(4)\" data-toggle=\"modal\" data-target=\"#editBrandModal\"><i class=\"fa fa-pencil\"><\/i><\/button> <button type=\"button\" class=\"btn btn-default\" onclick=\"removeBrand(4)\" data-toggle=\"modal\" data-target=\"#removeBrandModal\"><i class=\"fa fa-trash\"><\/i><\/button>\n\t\t\t\t"]
    ]
}
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: 8192</p>
<p>Message:  str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated</p>
<p>Filename: core/Output.php</p>
<p>Line Number: 457</p>


    <p>Backtrace:</p>

UPDATE: Code

if ($this->parse_exec_vars === TRUE) 
{ 
    $memory = round(memory_get_usage() / 1024 / 1024, 2).'MB'; 
    // below is line 457
    $output = str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output); 
}
6 Answers

Use a ternary operator.

Before Codeigniter existing code:

$output = str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output);

Hopefully, it's will work fine.

After Use Ternary Operator:

$output = $output ? str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output): "";

This error message can show up if you have not loaded any views. Codeigniter's internal output buffer is never initialized thus being null. The output buffer is the third parameter to str_replace(). There might be other ways to trigger this error message.

You probably want to load a valid view, at some point.

PHP 7 and lower just would ignore the missing parameter, while PHP 8+ displays the warning. It may also vary with your environment / debug settings.

I also faced same issue just used these lines in your Controller constructor method

 public function __construct()
{
    parent::__construct();
    error_reporting(0);
    $this->load->library("session");
    $this->load->helper('url');
}

I have had such an error

This is the only way to get rid of the error. That you PHP 7 & 8 install you'r System

php install in c/:xampp & c/:xampp2 installed. beacuse difrant drive in error occuerd

And

Benefit in other programs

Multiple xampp installations windows

Another option is to check $output in the existing if statement. That will skip the entire block of code that isn't needed when $output is NULL or empty.

if ($this->parse_exec_vars === TRUE && !empty($output)) 
{ 
    $memory = round(memory_get_usage() / 1024 / 1024, 2).'MB'; 
    // below is line 457
    $output = str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output); 
}

I Have downgraded my CI version to 3 and PHP verison to 7.3

Its working now

Related