本地安裝的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
謝謝大家的熱心回答