繁体   English   中英

Scandir不在远程时列出文件

[英]Scandir not listing files when remote

我正在为网站资产进行图像压缩Cron工作。 我面临的问题是代码在本地可以正常运行,但不能在远程服务器上运行。

我正在使用scandir ,我已经看过相关的文章: php scandir()不显示文件-仅显示目录,用户在说它不是递归的。 但是,在我的本地系统上,我已经在远程服务器上复制了文件夹结构,并且可以完美地工作。

我具有以下用于文件夹和文件的功能。

function getFilesInDir($path)
{
    $directory = $path;
    if (is_dir($directory))
    {
        $files = array();
        foreach(scandir($directory) as $file)
        {
            if ('.' === $file) continue;
            if ('..' === $file) continue;
            $files[] = $file;

            // }

        }
    }

    return $files;
}

当我在文件夹上使用var_dump时,我得到正确的结果。 它列出了指定目录中的所有文件夹。

用法

$folders = getFilesInDir("site/assets/files");

foreach($folders as $folder)
{
    $files = getFilesInDir($folder);
    //...Do the rest

因此, var_dump($folders)显示正确的目录。 当我执行var_dump($files)我得到NULL NULL NULL NULL NULL

我重申,这在我的本地计算机上正常运行,但在我的远程服务器上却无法正常运行。

完整的代码(如果有用的话)我知道它不是很漂亮,但是它可以工作,而且我正在最后期限。

<?php

// $folders = getFilesInDir(getcwd());

$folders = getFilesInDir("site/assets/files");

foreach($folders as $folder)
{
    $files = getFilesInDir($folder);
    var_dump($files);
    if ($files)
    {
        $x = array_filter($files, "isImage");
        foreach($files as $f)
        {
            $path_parts = pathinfo($f);
            if (@$path_parts['extension'] != null)
            {
                if (filesize($folder . "/" . $f) > 1000000)
                {
                    echo $f . " - " . filesize($folder . "/" . $f) . "<br />";
                    if ($path_parts['extension'] == "jpg" || $path_parts['extension'] == 

"jpeg" || $path_parts['extension'] == "png")
                    {

                        // Make bin folder if not exists

                        MakeFolder($folder . "/");

                        // Compress file in folder to bin folder

                        $d = compress($folder . "/" . $f, $folder . "/bin/" . $f, 30);

                        // Delete files in base

                        unlink($folder . "/" . $f);

                        // Move files from bin to root

                        rename($folder . "/bin/" . $f, $folder . "/" . $f);
                    }
                }
            }
        }
    }
}

function MakeFolder($path)
{
    if (!file_exists($path . "/bin/"))
    {
        mkdir($path . "/bin/", 0777, true);
    }
}

function isImage($var)
{
    $path_parts = pathinfo($var);
    if (@$path_parts['extension'])
    {
        if ($path_parts['extension'] == "jpg" || $path_parts['extension'] == "jpeg" || $path_parts

['extension'] == "png")
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

function getFilesInDir($path)
{
    $directory = $path;
    if (is_dir($directory))
    {
        $files = array();
        foreach(scandir($directory) as $file)
        {
            if ('.' === $file) continue;
            if ('..' === $file) continue;
            $files[] = $file;

            // }

        }
    }

    return $files;
}

function compress($source, $destination, $quality)
{
    $info = getimagesize($source);
    if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($source);
    elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($source);
    elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($source);
    imagejpeg($image, $destination, $quality);
    return $destination;
}

?>

scandir仅返回不带path的文件名。 您需要将原始文件夹的路径追加到新文件夹的路径。

$path = "site/assets/files"
$folders = getFilesInDir($path);

foreach($folders as $folder)
{
    $files = getFilesInDir($path . "/" . $folder);
    var_dump($files);

希望这样做。

暂无
暂无

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

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