【问题标题】:PHP is_dir() doesn't work when nestedPHP is_dir() 在嵌套时不起作用
【发布时间】:2013-10-05 15:42:09
【问题描述】:

这是我的文件夹结构:

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() 中吗?

谢谢

【问题讨论】:

    标签: php


    【解决方案1】:

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

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

    $newPath = $folder.DIRECTORY_SEPARATOR.$entry;
    

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

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

    【讨论】:

    • 仅供参考 Wikipedia 有一个很好的目录分隔符汇编。
    • 如果 PHP 在内部这样做,如果 DIRECTORY_SEPARATOR 是 /,str 替换函数不会运行,从而使性能参数无效?
    【解决方案2】:

    Linux 使用/ 进行文件夹分离,Windows 也是如此。只有DOS没有。将\\ 替换为/,您应该一切顺利。

    【讨论】:

    • 哇,就这么简单?非常感谢。
    • WTH??收到此消息“您可以在 5 分钟内接受答案”:) 我想我必须稍后再回来 :)
    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2012-08-28
    相关资源
    最近更新 更多