PHP字符串替换():将空值传递给数组类型的参数#3($subject)|字符串已过时

cmssoen2  于 2022-11-21  发布在  PHP
关注(0)|答案(6)|浏览(503)

我在运行应用程序时遇到此错误:
PHP字符串替换():将空值传递给数组类型的参数#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>

更新:代码

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); 
}
wztqucjr

wztqucjr1#

使用三元运算符将修复此错误。
在Codeigniter现有代码之前:

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

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

使用三元运算符之后:

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

kfgdxczn2#

如果您没有加载任何视图,则会显示此错误消息。Codeigniter的内部输出缓冲区从未初始化,因此为null。输出缓冲区是str_replace()的第三个参数。可能有其他方式触发此错误消息。
您可能希望在某个时候加载一个有效的视图。
PHP7和更低版本会忽略缺少的参数,而PHP 8+会显示警告。它也可能随您的环境/调试设置而变化。

ijxebb2r

ijxebb2r3#

我在Controller构造函数方法中使用这些行时也遇到了同样问题

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

ca1c2owp4#

另一个选择是检查现有if语句中的$output,这将跳过$output为NULL或空时不需要的整个代码块。

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); 
}
gcuhipw9

gcuhipw95#

我犯过这样的错误
这是唯一的方法来摆脱错误.你PHP 7 & 8安装你的系统
php安装在c/:xampp & c/:xampp 2已安装。因为不同的驱动器出现错误
还有
其他计划中的福利
Multiple xampp installations windows

fquxozlt

fquxozlt6#

我已将CI版本降级为3,PHP版本降级为7.3
正在工作

相关问题