2017-06-07 3 views
0

のすべてのルートディレクトリを調べていますので、これを行うには数日間試してみました。しかし、私はまだそれが動作するように私はこのコードを構築する方法を単一の手掛かりを持っていない。多分誰かが考えを持っているかもしれない。PHPはキーワード

ゴール:ルートディレクトリとそのサブディレクトリのいずれかを自動的に繰り返します。キーワードと一致するディレクトリがある場合は、配列に格納する必要があります。

私はディレクトリを探しているだけなので、名前にドットを含むすべてのオブジェクトを除外する正規表現があります。まだ完璧ではありませんが、それは問題ではありません。

私のコードの最初のバージョンを投稿します。これで、関数を呼び出すときに関数へのハンドリングディレクトリをスキャンするだけです。すべての私の他の試みはゴミであり、この1つは、少なくとも

searchformigration('/'); 


/* Check for related folders, that could be used for a migration */ 
function searchformigration($dir) 
{ 
    $scanned_elements = scandir($dir); 

    for($c = 0; $c <= (count($scanned_elements) - 1); $c++) 
    { 
     /* Anything but files containing a dot (hidden files, files) */ 
     if(preg_match('/^[^.]+$/', $scanned_elements[$c])) 
     { 
      /* Checking for the keyword "Project" */ 
      if($scanned_elements[$c] == '*Project*') 
      { 
       echo $scanned_elements[$c]; 
       echo '</br>'; 
      } 
      else 
      { 
       continue; 
      } 
     } 
     else 
     { 
      continue; 
     } 
    } 
} 
+0

ディレクトリにも名前に '.'を付けることができます。 –

+0

私は知っています。関数が動作しているときに適切な正規表現に行きます。それは問題ではありません。 – Oliver

答えて

1

RecursiveDirectoryIteratorでファイルとフォルダを再帰的に取得することができます。これは、フォルダ名内の 'project'というディレクトリを検索します。

print_r(get_dirs('/','project')); 


function get_dirs($path = '.', $search='') { 

$dirs = array(); 

$iterator = new RecursiveIteratorIterator(
       new RecursiveDirectoryIterator($path), 
      RecursiveIteratorIterator::SELF_FIRST); 

    foreach ($iterator as $file) { 
     if ($file->isDir()) 
     { 

      if (strpos($file->getFileName(), $search) !== false) 
      { 
       $dirs[] = $file->getRealPath(); 
      } 
     } 
    } 

    return $dirs; 
} 
+0

何かを変更する必要があります。しかし、仕事。ご回答有難うございます! :) – Oliver

1

に動作しますので、私は再帰的にすべてのディレクトリを取得し、Projectをgrepします:

function searchformigration($dir) { 
    $results = glob($dir, GLOB_ONLYDIR); 

    foreach($results as $subdir) { 
     $results = array_merge($results, searchformigration($subdir)); 
    } 
    return $results; 
} 

$results = preg_grep('/Project/', searchformigration('/')); 

あなたはまた、Linux上でこれを行うことができます。

exec("find/-type d -name 'Project'", $results); 
+0

あなたの答えをありがとう。今、私はこのエラーを受け取りました。 '/Applications/XAMPP/xamppfiles/htdocs/Project_Manager/config/modul/migration.php 39行目で' 134217728バイトのメモリサイズが使い果たされました(130968バイトを割り当てようとしました)。一度にすべてのディレクトリを取得するのは大変ですか? – Oliver

+0

おそらくサーバーのルートからです。メモリの上限を増やすことはできますが、それでも余りにも多くなる可能性があります。 Linuxコマンドを追加しました。 – AbraCadaver

関連する問題