3

以下のスクリプトでは、$baseディレクトリに存在するフォルダを$targetディレクトリにコピーしようとしています。ただし、最初のエコーテストでは、が返されます。条件付きでその例外を処理しようとしているのに、..ディレクトリ。

私は何が欠けていますか?

    $base = dirname(__FILE__).'/themes/';
    $target = dirname( STYLESHEETPATH );
    $directory_folders = new DirectoryIterator($base); 
    foreach ($directory_folders as $folder) 
    {
         if ($folder->getPath() !== '.' && $folder->getPath() !=='..' ) 
         {
            echo '<br>getPathname: '. $folder->getPathname();
            //copy($folder->getPathname(), $target);
         }
    }die;

ただし、条件を...に変更した場合、これは私には意味がありません。

         if (!is_dir($folder) && $folder->getPath() !== '.' && $folder->getPath() !=='..' ) 

$base内の正しいフォルダを返します。何?

4

2 に答える 2

3

DirectoryIterator::getPath()ディレクトリの最後の部分だけでなく、ディレクトリへのフルパスを返します。

そのパスの最後の部分だけが必要な場合は、おそらくSplFileInfo::getBasename()自分の状態で使用する必要があります。

または、特定のテストについては、DirectoryIterator::isDot()メソッド(引用符)を確認することをお勧めします。

現在の DirectoryIteratorアイテムが'.'または '..'

于 2011-03-24T18:42:45.400 に答える
1

代わりに使用できますDirectoryIterator::isDot

if (!$folder->isDot()) 
于 2011-03-24T18:44:49.003 に答える