繁体   English   中英

严格标准:“仅变量应通过引用传递”

[英]Strict Standards: “Only variables should be passed by reference”

在下面的php函数中,我在第31行有错误“严格标准:仅变量应通过引用传递”

在论坛上阅读答案时,我必须更改explode(..)。 但我不知道如何

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

根据PHP手册end

此数组通过引用传递,因为它已由函数修改。 这意味着您必须为它传递一个实变量,而不要向它传递返回数组的函数,因为只能通过引用传递实际变量。

参数应仅作为数组变量发送。


去做:

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']

尝试在if语句中分隔您的代码,如下所示:

// 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

您可以尝试以下代码:

<?php

<?php

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

                    $path_info = pathinfo($path);
                    $ext = strtolower($path_info['extension']);

                    if (is_file($path) && in_array($ext, $exts)) {
                        $html .= '<a href="' . $path . '"><img src="' . $path
                            . '" style="max-height:100px;max-width:100px" /></a>';
                    }
                }
            }
        }
        closedir($directoryList);
    }
    return $html;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM