【问题标题】:is_dir() returns FALSE when passed a subfolderis_dir() 在传递子文件夹时返回 FALSE
【发布时间】:2011-12-04 03:36:43
【问题描述】:

is_dir() 根据 php 手册,如果传递一个指向文件夹的字符串,则返回 true。 它返回错误——尽管传递了一组有效的文件夹名称——这可能很简单,但我因为找不到它而自责。

代码如下:

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

与:

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个子文件夹,1个文件,所以上面的count的显示是:

The number of folders/files found is: 8

【问题讨论】:

  • 离题:- 可怕的变量名,太长且难以理解
  • 代码太多,无法仅测试一个功能。

标签: php


【解决方案1】:

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

【讨论】:

  • 大家好,我向大家表示赞赏,因为您花时间帮助了一位程序员。我不赞成投票。不知道我们所有人需要多长时间才能弄清楚你永远不可能有很多朋友。祝你们好运,谢谢男人!我必须在这里接受迈克尔,因为他是第一个,但与其他问题一样,这里有很多很好的答案,谢谢。 is_dir() 根本没有“细微差别”——“细微差别”是 scandir() 的数组偏离了完全限定的路径,我没有抓住它(我一生中第一次使用scandir() 他谦虚地说)。周末愉快!
  • 这是有效的。每个人都会犯这个错误。在没有完整文件路径的情况下检查 is_dir()
【解决方案2】:

您可以通过简单地调用glob来替换所有内容

$dirs = glob("C:/xampp/htdocs/theProj/mainSubdir/*", GLOB_ONLYDIR);

详情:- http://php.net/manual/en/function.glob.php

【讨论】:

    【解决方案3】:

    您必须在调用 is_dir 之前添加 $rootOfmainSubdir,如下所示:

    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]) );  
    

    【讨论】:

      【解决方案4】:

      manual 表示你给is_dir() 的文件名是

      文件的路径。如果文件名是一个相对文件名,它将被检查相对 到当前工作目录。

      因此,您需要在每个目录前加上“./”,以便 is_dir 在 current 目录中搜索它。否则,它会在“/”下查找,可能不是您想要的。

      【讨论】:

      • 我使用递归函数上传文件,这个提示对我有帮助。谢谢@djhaskin987
      猜你喜欢
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2011-10-21
      • 1970-01-01
      • 2015-09-21
      相关资源
      最近更新 更多