Scandir在远程时不列出文件

时间:2015-05-04 15:05:23

标签: php

我正在为我的网站资产开展图像压缩cron作业。我面临的问题是代码在本地工作正常但在远程服务器上没有。

我正在使用scandir,我看过相关帖子:php scandir() not showing files - only showing directories用户说它不是递归的。但是在我的本地系统上,我已经复制了远程服务器上的文件夹结构,它运行正常。

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

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

?>

1 个答案:

答案 0 :(得分:1)

<select id="mySelect"> <option value="1">one</option> <option value="2">two</option> </select> <div id="whenValOne">Value is one</div> $(function() { $("#mySelect").change("change", function() { if(this.value == 1) $("#whenValOne").show(); else $("#whenValOne").hide(); }); }); 仅返回文件名无路径。您需要将原始文件夹的路径附加到新文件夹。

scandir

希望这样做。