Heim >Backend-Entwicklung >PHP-Tutorial >求教 报这个错误可能是什么原因

求教 报这个错误可能是什么原因

WBOY
WBOYOriginal
2016-06-23 13:44:02971Durchsuche

本地安装的ecshop网站传到网上报这个错误  Strict Standards: Only variables should be passed by reference in lib_main.php on line 2661  本地php是5.2的

这个文件 的2661行是这样的    $ext = end(explode('.', $tmp));

    $tmp = basename($tmp,".$ext");  求教可能是什么原因 


回复讨论(解决方案)

 Strict Standards: Only variables should be passed by reference
严格的标准:在这里只能是变量
$ext = end(explode('.', $tmp));
应写作
$t = $ext = explode('.', $tmp);
$ext = end($t);
这是 php 5.4 以后才有的错误检查
其实 php 早就已经提供了更简洁的函数
$ext = pathinfo($tmp, PATHINFO_EXTENSION);

end需要的参数是引用类型  ,引用类型必须是左值,如下
mixed end ( array &$array )
而函数explode返回的的是右值,是不能作为引用的

mixed end ( array &$array )

end内参数是引用类型。
是explode返回的并不是变量,所以出错。

其实改一改就可以。

$ext = substr($tmp, strrpos($tmp,'.')+1);




$ext = explode('.', $tmp);$ext = array_pop($ext);echo $ext;

再强调一下,这只是错误检查级别造成的
并非 end 函数不能接受函数的返回值

echo phpversion() , PHP_EOL; //打印出 php 把本号$tmp = 'aaa.ext';$ext = @end(explode('.', $tmp)); //屏蔽掉错误信息echo $ext; //输出 ext

谢谢大家的热心回答

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn