阿里云主机

万维景盛

万维景盛官网
ecshop报错Strict Standards: Only variables should be passed by reference in cls_template.php的解决方法

有的用户在使用ecshop程序时,遇到Strict Standards: Only variables should be passed by reference in upload\includes\cls_template.php on line 418这个报错,一般是由于ecshop程序不兼容高级版的php版本造成的。万维景盛工程师在这里为大家分享解决方法。

方案一:调整主机的php版本为php5.2。如果主机商的主机可以调整php版本,那么是最简单的解决方法。因为ecshop是在php5.2的环境下运行的,如果放在php5.3、php5.4等高版本环境中运行,就会遇到各种报错。

方案二:修改相关错误程序:

418行把这一句拆成两句就没有问题了

$tag_sel = array_shift(explode(' ', $tag)); 

改成: 

$tag_arr = explode(' ', $tag); $tag_sel = array_shift($tag_arr);

(实验过,绝对可行) 

因为array_shift的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值

同理举一反三:遇到函数嵌套错误时可以分开写,错误自然解决

 

如:

function get_dyna_libs($theme, $tmp)
{
$extsub = explode('.', $tmp);
$ext = end($extsub);
$tmp = basename($tmp,".$ext");
$sql = 'SELECT region, library, sort_order, id, number, type' .
' FROM ' . $GLOBALS['ecs']->table('template') .
" WHERE theme = '$theme' AND filename = '" . $tmp . "' AND type > 0 AND remarks=''".
' ORDER BY region, library, sort_order';
$res = $GLOBALS['db']->getAll($sql);
$dyna_libs = array();
foreach ($res AS $row)
{
$dyna_libs[$row['region']][$row['library']][] = array(
'id' => $row['id'],
'number' => $row['number'],
'type' => $row['type']
);
}
return $dyna_libs;
}

 

将$ext = end(explode('.', $tmp));

改为

$extsub = explode('.', $tmp);

$ext = end($extsub);

 

方案三:屏蔽错误

 

或则如果这样配置的话: error_reporting = E_ALL | E_STRICT

php.ini中有如下设置:

error_reporting = E_ALL | E_STRICT

 

这是说,显示那些不符合编码规范的警告(coding standards warnings)。

Joomla其实是建议取消error的输出,如果出于调试需要,应改为

error_reporting = E_ALL & ~E_NOTICE

 

问题得到解决。


< 购物车 > 会员 客服 充值 工单
Top

客服热线

010-80253326

18610695105

客服QQ

请拨总机 010-80253326

咨询售后问题建议 提交工单