is_dir () возвращает FALSE при передаче подпапки

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 

А ТАКЖЕ:

 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 

Вы сканируете $rootOfmainSubdir , но вы тестируете is_dir() в текущем каталоге. Перед проверкой вы можете либо добавить корневой каталог, либо каталог, или chdir() . Обратите внимание, что в вашем текущем каталоге также есть . и .. записи.

Вы можете заменить все простым вызовом glob

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

Подробности: – http://php.net/manual/en/function.glob.php

Вам нужно будет добавить $rootOfmainSubdir в свой вызов 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]) ); 

В руководстве указано, что имя файла, которое вы даете is_dir() является

Путь к файлу. Если filename является относительным именем файла, оно будет проверяться относительно текущего рабочего каталога.

Поэтому вам нужно поставить «./» перед каждым каталогом, чтобы is_dir мог искать в нем текущий каталог. В противном случае он выглядит под «/», возможно, не тем, что вы хотите.