验证文件夹中的文件

时间:2011-07-01 07:00:34

标签: php sha1

我想验证存储在目录中的文件,所以我写了这个脚本。

<?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

我的脚本位于内部文件夹中,想要使用include从MoreInner文件夹访问它,但它显示错误FILE NOT FOUND/ PERMISSION DENIED

  • 我想做什么 获取存储在上面目录中的文件的SHA1_FILE。

2 个答案:

答案 0 :(得分:2)

使用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";
}

答案 1 :(得分:0)

至于代码示例如何将代码转换为函数并为路径添加参数:

将此功能全局用于应用程序的任何脚本,无论您在哪个目录中放置它们用于您的应用程序:

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. '..'