2013-08-05 3 views
0

Есть все эти ресурсы для рекурсивного циклирования через вспомогательные каталоги, но я не нашел ONE, который показывает, как делать обратное.Как перебрать родительские каталоги в php?

Это то, что я хочу сделать ...

<?php 

// get the current working directory 

// start a loop 

    // check if a certain file exists in the current directory 

    // if not, set current directory as parent directory 

// end loop 

Так, другими словами, я искал очень конкретный файл в текущем каталоге, если он там не существует, проверка это родитель, затем он является родителем и т. д.

Все, что я пробовал, просто кажется уродливым для меня. Надеюсь, у кого-то есть элегантное решение.

Спасибо!

+0

"Все, что я пытался просто чувствует себя некрасиво со мной." - почему это кажется уродливым? Что именно вы пробовали? –

+1

Не можете ли вы проверить 'myfile', затем' ../ myfile', '../../ myfile' и т. Д.? –

+0

Что вы хотите найти. – srain

ответ

1

Попробуйте создать рекурсивную функцию как этот

function getSomeFile($path) { 
    if(file_exists($path) { 
     return file_get_contents($path); 
    } 
    else { 
     return getSomeFile("../" . $path); 
    } 
} 
+0

Это сработало отлично. Благодаря! – Johnny

+0

Одна проблема с этим методом, хотя она не знает, когда она достигла корня для остановки. Это просто работает вечно. И в моем случае заперли компьютер. Lol – Johnny

1

Самый простой способ сделать это будет использовать ../ это переместит вас в папке выше. Затем вы можете получить список файлов/папок для этого каталога. Не забывайте, что если вы проверите детей в каталоге выше вас, вы проверите своих братьев и сестер. Если вы просто хотите пойти прямо вверх по дереву, вы можете просто продолжать увеличивать каталог до тех пор, пока не нажмете root или пока вам не разрешено идти.

1
<?php 

$dir = '.'; 
while ($dir != '/'){ 
    if (file_exists($dir.'/'. $filename)) { 
     echo 'found it!'; 
     break; 
    } else { 
     echo 'Changing directory' . "\n"; 
     $dir = chdir('..'); 
    } 
} 
?> 
+1

Oooh приятно. Мне тоже нравится это. Молодец, сэр! – Johnny

+0

Итак, в ТЕОРИИ мне это нравится. Поскольку 'chdir()' возвращает TRUE или FALSE, а не новый каталог. – Johnny

+0

Я также прочитал ваш комментарий под тем, который вы отметили как правильный ответ, тогда вы, вероятно, должны его изменить? – mavili

0

Модифицированные Mavili «ы код:

function findParentDirWithFile($file = false) { 
    if (empty($file)) { return false; } 

    $dir = '.'; 

    while ($dir != '/') { 
     if (file_exists($dir.'/'. $file)) { 
      echo 'found it!'; 
      return $dir . '/' . $file; 
      break; 
     } else { 
      echo 'Changing directory' . "\n"; 
      chdir('..'); 
      $dir = getcwd(); 
     } 
    } 

} 
+0

Можете ли вы дать некоторое описание или что-то мотивировать этот ответ? Я действительно не получаю значение, которое вы добавляете к разговору. – pamphlet

Смежные вопросы