1

这是我的文件夹结构:

main 
- folder_1
-- folder_1_1
-- folder_1_2
-- folder_1_3
- folder_2
-- folder_2_1
-- folder_2_2
-- folder_2_3

这是我的代码:

<?php

$mainfolder ="main";

function readDirs($mainfolder){
    if(hasSubFolder($mainfolder)){
        echo("$mainfolder HAS sub folder");
    }else{  
        echo("$mainfolder DOESN'T HAVE sub folder");
    }   
}

function hasSubFolder($folder){ 
    $newPath="";
    if (is_dir($folder)) {  
        echo ("$folder IS a folder</br>"); 
        $handle = opendir($folder);
        while (false !== ($entry = readdir($handle))) {
            $newPath = $folder."\\".$entry;
            if (is_dir($newPath)){
                echo "$newPath IS a folder</br>";
            } else {                
                echo "$newPath IS NOT a folder</br>";
            }
        }       
    }   
}

readDirs($mainfolder);

?>

这就是我得到的:

main IS a folder
main\. is NOT a folder
main\.. is NOT a folder
main\folder_1 is NOT a folder
main\folder_2 is NOT a folder
main DOESN'T HAVE sub folder

所以我想知道为什么“if (is_dir($newPath))”即使 $newPath 是一个文件夹/目录也不返回 true。是因为它嵌套在另一个 is_dir() 中吗?

感谢

4

2 回答 2

5

由于 PHP 可以在多种平台上运行,这些平台可能使用比正斜杠或反斜杠更奇特的目录分隔符,因此定义了一个漂亮的系统常量,您可以使用它来代替:DIRECTORY_SEPARATOR.

它自动包含当前主机操作系统的正确分隔符,例如 Windows 的反斜杠或 *nix 系统的正斜杠。然后你可以使用:

$newPath = $folder.DIRECTORY_SEPARATOR.$entry;

正如其他答案所暗示的那样,这总是比为任何操作系统硬编码要好。

目前,出于向后兼容性的原因,PHP 在内部总是在其内部文件函数中执行str_replacefrom /to DIRECTORY_SEPARATOR,但这不能保证永远保持工作 - 它会降低性能并且不是严格需要的。

于 2013-10-05T15:59:03.337 回答
4

Linux/用于文件夹分离,Windows 也是如此。只有DOS没有。替换\\/,你应该很高兴。

于 2013-10-05T15:45:07.943 回答