PHP str_replace():不推荐将 null 传递给类型为 array|string 的参数 #3 ($subject)

Asa*_*n A 14 php codeigniter

我在运行我的应用程序时收到此错误:

PHP str_replace():不推荐将 null 传递给类型为 array|string 的参数 #3 ($subject)

我正在使用 CodeIgniter 版本:V4.1.8 PHP 版本:8.1.2,完整错误输出如下:

{"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>
Run Code Online (Sandbox Code Playgroud)

更新:代码

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); 
}
Run Code Online (Sandbox Code Playgroud)

小智 28

使用三元运算符将修复此错误。

Codeigniter之前现有代码:

$output = str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output);
Run Code Online (Sandbox Code Playgroud)

希望它能正常工作,因为我们将把 str_replace 转义为空值。

使用三元运算符后:

$output = $output ? str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output): "";
Run Code Online (Sandbox Code Playgroud)

  • codeigniter 的 `Output.php` 文件 `(system/core/Output.php)` 中出现错误,您需要替换 `$output = str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output);` 这与 `$output = $output ? str_replace(array('{elapsed_time}', '{memory_usage}'), array($elapsed, $memory), $output): ""; `。它位于第 1 行。457 在系统/核心/Output.php (5认同)

Jah*_*mic 5

如果您尚未加载任何视图,则可能会显示此错误消息。Codeigniter 的内部输出缓冲区从未初始化,因此是null. 输出缓冲区是 的第三个参数str_replace()。可能还有其他方法可以触发此错误消息。

在某些时候,您可能想要加载有效的视图。

PHP 7 及更低版本只会忽略缺少的参数,而 PHP 8+ 显示警告。它也可能因您的环境/调试设置而异。