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 мог искать в нем текущий каталог. В противном случае он выглядит под «/», возможно, не тем, что вы хотите.