在下面的php函数中,我在第31行出现错误“严格标准:只应通过引用传递变量”
当我在论坛上阅读答案时,我必须改变爆炸(..)。但我不知道如何......
function scanDirectoryImages($directory, array $exts = array('jpeg', 'jpg', 'png'))
{
if (substr($directory, -1) == 'uploads/') {
$directory = substr($directory, 0, -1);
}
$html = '';
if (
is_readable($directory)
&& (file_exists($directory) || is_dir($directory))
) {
$directoryList = opendir($directory);
while($file = readdir($directoryList)) {
if ($file != '.' && $file != '..') {
$path = $directory . '/' . $file;
if (is_readable($path)) {
if (is_dir($path)) {
return scanDirectoryImages($path, $exts);
}
if (
is_file($path) && in_array(end(explode('.', end(explode('/', $path)))), $exts) // Line 31
) {
$html .= '<a href="' . $path . '"><img src="' . $path
. '" style="max-height:100px;max-width:100px" /></a>';
}
}
}
}
closedir($directoryList);
}
return $html;
}
答案 0 :(得分:2)
According to the PHP Manual的点击次数:
此数组通过引用传递,因为它由函数修改。这意味着你必须传递一个实变量,而不是一个返回数组的函数,因为只有实际的变量可以通过引用传递。
参数应仅作为数组变量发送。
<强> TODO:强>
在if
:
is_file($path) && in_array(end(explode('.', end(explode('/', $path)))), $exts)
这样的事情:
$path1 = explode('/', $path);
$path2 = end($path1);
$path3 = explode('.', $path1);
$path4 = end($path3);
is_file($path) && in_array($path4, $exts)
<强>可替换地,强>
由于您从路径获得扩展,因此可以使用pathinfo
:
pathinfo($path)['extension']
答案 1 :(得分:0)
try to separate your code in the if statement like this, this should work :
// other code
if (is_dir($path)) {
return scanDirectoryImages($path, $exts);
}
$explode_1 = explode('/', $path);
$explode_2 = explode('.', end($explode_1));
if (is_file($path) && in_array(end($explode_2), $exts)) {
// the rest of the code
答案 2 :(得分:0)
您可以尝试以下代码:
/todo\_.\{-}stdio