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