Php 枚举父目录中的文件

Php 枚举父目录中的文件,php,filesystems,Php,Filesystems,我有以下函数枚举给定文件夹中的文件和目录。它可以很好地处理子文件夹,但由于某些原因,它不希望处理父目录。你知道为什么吗?我想可能是PHP设置之类的,但我不知道从哪里开始。如果是的话,我就不走运了,因为这是一个廉价的共享主机设置 下面是如何使用该函数。第一个参数是要枚举的路径,第二个参数是要忽略的筛选器列表。我已尝试通过下面列出的完整路径。我试着只传递。,。和realpath(“…”)。似乎什么都不管用。我知道这个函数并不是以某种方式默默地失败。如果我手动向dirs数组添加一个目录,我会得到一个返

我有以下函数枚举给定文件夹中的文件和目录。它可以很好地处理子文件夹,但由于某些原因,它不希望处理父目录。你知道为什么吗?我想可能是PHP设置之类的,但我不知道从哪里开始。如果是的话,我就不走运了,因为这是一个廉价的共享主机设置

下面是如何使用该函数。第一个参数是要枚举的路径,第二个参数是要忽略的筛选器列表。我已尝试通过下面列出的完整路径。我试着只传递
realpath(“…”)
。似乎什么都不管用。我知道这个函数并不是以某种方式默默地失败。如果我手动向dirs数组添加一个目录,我会得到一个返回值

$projFolder = '/hsphere/local/home/customerid/sitename/foldertoindex';
$items = enumerateDirs($projFolder, array(0 => "Admin", 1 => "inc"));
下面是函数本身

function enumerateDirs($directory, $filterList)
{
    $handle = opendir($directory);
    while (false !== ($item = readdir($handle)))
    {
        if ($item != "." && $item != ".." && $item != "inc" && array_search($item, $filterList) === false)
        {
            $path = "{$directory->path}/{$item}";

            if (is_dir($item))
            {
                $tmp['name'] = $item;
                $dirs[$item] = $tmp;
                unset($tmp);
            }
            elseif (is_file($item))
            {
                $tmp['name'] = $item;
                $files[] = $tmp;
                unset($tmp);
            }
        }
    }

    ksort($dirs, SORT_STRING);
    sort($dirs);

    ksort($files, SORT_STRING);
    sort($files);

    return array("dirs" => $dirs, "files" => $files);
}

你把opendir和dir弄混了。您还需要将完整路径(包括目录组件)传递给is_dir和is_文件。(我假设这就是您使用$path的目的。)否则,函数将在脚本文件的目录中查找相应的文件系统对象

请尝试以下快速修复方法:

<?php

function enumerateDirs($directory, $filterList)
{
    $handle = dir($directory);

    while (false !== ($item = $handle->read()))
    {
        if ($item != "." && $item != ".." && $item != "inc" && array_search($item, $filterList) === false)
        {
            $path = "{$handle->path}/{$item}";

            $tmp['name'] = $item;

            if (is_dir($path))
            {
                $dirs[] = $tmp;
            }
            elseif (is_file($path))
            {
                $files[] = $tmp;
            }

            unset($tmp);
        }
    }

    $handle->close();

    /* Anonymous functions will need PHP 5.3+. If your version is older, take a
     * look at create_function
     */
    $sortFunc = function ($a, $b) { return strcmp($a['name'], $b['name']); };

    usort($dirs, $sortFunc);    
    usort($files, $sortFunc);

    return array("dirs" => $dirs, "files" => $files);
}

$ret = enumerateDirs('../', array());

var_dump($ret);

谢谢,这很有道理。由于这是一个附带项目,我不能检查,直到稍后。会让你知道,但你说的有道理(而且可能是对的)。