这是我的文件夹结构:
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))”没有返回true,即使$ newPath是一个文件夹/ dir。是因为它嵌套在另一个is_dir()吗?
感谢
答案 0 :(得分:5)
由于PHP可以在多个平台上运行,这些平台可能使用比前向或反向斜杠更奇特的目录分隔符,因此可以使用一个漂亮的系统常量来代替:DIRECTORY_SEPARATOR
。
它自动包含当前主机操作系统的正确分隔符,例如Windows的反斜杠或* nix系统的正斜杠。然后您可以使用:
$newPath = $folder.DIRECTORY_SEPARATOR.$entry;
这比任何操作系统的硬编码都强始终更好,正如其他答案所暗示的那样。
目前,出于向后兼容性的原因,PHP内部始终在其内部文件功能中从str_replace
到/
执行DIRECTORY_SEPARATOR
,但这并不能保证永远保持工作 - 这需要花费表现并非严格要求。
答案 1 :(得分:4)
Linux使用/
进行文件夹分离,而Windows也是如此。只有DOS没有。将\\
替换为/
,您应该好好去。