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

$newPath がフォルダー/ディレクトリであっても、「if (is_dir($newPath))」が true を返さない理由を知りたいです。別の is_dir() 内にネストされているためですか?

感謝

4

2 に答える 2

5

PHP は多数のプラットフォームで実行できるため、スラッシュやバック スラッシュよりも風変わりなディレクトリ セパレータを使用する可能性があるため、代わりに使用できる美しいシステム定数が定義されていますDIRECTORY_SEPARATOR

これには、Windows のバックスラッシュや *nix システムのスラッシュなど、現在のホスト OS の正しい区切り文字が自動的に含まれます。その後、次を使用できます。

$newPath = $folder.DIRECTORY_SEPARATOR.$entry;

これは、他の回答が示唆するように、どの OS でもハードコーディングするよりも常に優れています。

現在、後方互換性の理由から、PHP は常に内部ファイル関数内でstr_replacefrom /to を内部的に実行しますが、これは永久に動作し続けることが保証されているわけではありません。これはパフォーマンスを犠牲にし、厳密には必要ありません。DIRECTORY_SEPARATOR

于 2013-10-05T15:59:03.337 に答える
4

Linux は/フォルダーの分離に使用し、Windows も使用します。そうでないのはDOSだけです。に置き換える\\と、準備完了/です。

于 2013-10-05T15:45:07.943 に答える