Проверить файлы в папке - PullRequest
1 голос
/ 01 июля 2011

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

<?php
$files = scandir('..');
for ($i=0;$i<count($files);$i++)
{
 $file2 = realpath($files[$i]);
 if (!is_dir($file2))
  $hash = sha1_file($file2);
 else
  $hash = 'Dir';
 echo '<tr><td>'.$i.'</td><td>'.$file2.'</td><td>'.$hash.'</td><td>'.date ("F d Y H:i:s.",filemtime($file2)).'</td></tr>';
 $i;
}
?>

он работает хорошо, но если я включаю этот скрипт из более глубокой директории, то он не работает.

-www
 |_Sou
   |_Inner
     |_MoreInner

мой скрипт находится во внутренней папке и хочет получить к нему доступ изПапка MoreInner, использующая include, но она показывает ошибку FILE NOT FOUND/ PERMISSION DENIED

  • Что я хочу сделать, чтобы получить SHA1_FILE файлов, хранящихся в чуть выше каталоге.

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Использование RecurisveDirectoryIterator будет самым элегантным способом:

$it = new RecursiveDirectoryIterator('..', FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS);
foreach (new RecursiveIteratorIterator($it, RecursiveIteratorIterator::SELF_FIRST) as $item) {
    if (!$item->isDir()) {
        $hash = sha1_file($item->getRealPath());
    } else {
        $hash = 'Dir';
    }
    echo $item->getRealPath().' '.$hash.' '.date ("F d Y H:i:s.", $item->getMTime())."\n";
}
0 голосов
/ 01 июля 2011

Что касается примера кода, как преобразовать ваш код в функцию и добавить параметр для пути:

Сделать эту функцию доступной глобально для любых сценариев вашего приложения, где бы они ни находились, в каком каталоге они размещеныдля вашего приложения:

function verfiyFiles($path) {
 $files = scandir($path);
 for ($i=0;$i<count($files);$i++)
 {
  $file2 = realpath($files[$i]);
  if (!is_dir($file2))
   $hash = sha1_file($file2);
  else
   $hash = 'Dir';
  echo '<tr><td>'.$i.'</td><td>'.$file2.'</td><td>'.$hash.'</td><td>'.date ("F d Y H:i:s.",filemtime($file2)).'</td></tr>';
  $i;
 }
}

Тогда в любом скрипте вашего приложения вы можете использовать его:

verfiyFiles($path); # where $path is a path to the directory, e.g. '..'
...