传递子文件夹时,is_dir()返回FALSE

时间:2011-12-03 19:14:54

标签: php

is_dir()根据php手册返回true,如果传递了一个引用文件夹的字符串。 它正在返回false - 尽管传递了一系列有效的文件夹名称 - 这可能很简单,但我正在努力找不到它。

以下是代码:

define('TEST_SUBFOLDERS_FILES_PATH', 'C:/xampp/htdocs/theProj/mainSubdir/');

$currentFolder = ' ';
$rootOfmainSubdir = TEST_SUBFOLDERS_FILES_PATH';
$theArrayOfDirsAndFilesInmainSubdir;

// fill an array that contains all files and folders under the /mainSubdir folder
// using php's 'scandir()'
if( ($theArrayOfDirsAndFilesInmainSubdir = scandir($rootOfmainSubdir )) != FALSE )
{
  $numArrayEntries = count($theArrayOfDirsAndFilesInmainSubdir);
  echo "<br><br>The number of folders/files found is:  " . $numArrayEntries;


  // now do the triage on subfolders under /mainSubdir  versus files
  for($i = 0; $i < $numArrayEntries; $i++)
  {
    echo "<br><br>Current array element is:  " 
            . $theArrayOfDirsAndFilesInmainSubdir[$i]
            . "  and is_dir() on this element returns --> "
            . var_dump( is_dir($theArrayOfDirsAndFilesInmainSubdir[$i]) );  
    // rest of code

以下是我在输出中看到的几乎所有文件夹:

Current array element is: testFolderN and is_dir() on this element returns -->

boolean false

或者我看到了:

Current array element is: . and is_dir() on this element returns -->

boolean true

AND:

Current array element is: .. and is_dir() on this element returns -->

boolean true

我错过了一些非常愚蠢的东西,但是谢谢。似乎is_dir()只为当前文件夹“。”正确返回TRUE。和父文件夹“..”

如果在使用is_dir()时我缺少细微差别,我就没有看到它。

帮助表示赞赏 - 我在代码中要做的就是在TEST_SUBFOLDERS_FILES_PATH下列出当前子文件夹,如果我能让is_dir()返回TRUE不仅仅是为了“。”和“..”以及其他'testFolderN'子文件夹。

顺便说一下 - 目录中总共有5个子文件夹和一个文件,因此上面显示的计数是:

The number of folders/files found is: 8

4 个答案:

答案 0 :(得分:1)

您扫描$rootOfmainSubdir,但在当前目录中测试is_dir()。您可以在检查前添加根目录和目录分隔符,也可以在其中chdir()。请注意,您当前的目录还包含...条目。

答案 1 :(得分:1)

您必须在$rootOfmainSubdir的{​​{1}}电话中添加is_dir,这样:

for($i = 0; $i < $numArrayEntries; $i++)
{
   echo "<br><br>Current array element is:  " 
        . $theArrayOfDirsAndFilesInmainSubdir[$i]
        . "  and is_dir() on this element returns --> "
        . var_dump( is_dir(rootOfmainSubdir.$theArrayOfDirsAndFilesInmainSubdir[$i]) );  

答案 2 :(得分:1)

您只需拨打glob

即可替换所有内容
$dirs = glob("C:/xampp/htdocs/theProj/mainSubdir/*", GLOB_ONLYDIR);

详细信息: - http://php.net/manual/en/function.glob.php

答案 3 :(得分:-1)

manual表示您提供的文件名is_dir()

  

文件的路径。如果filename是相对文件名,则将相对检查   到当前的工作目录。

因此,您需要在每个目录前放置“./”,以便is_dir在当前目录中搜索它。否则,它看起来在“/”下,可能不是你想要的。