我想验证存储在目录中的文件,所以我写了这个脚本。
<?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
答案 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. '..'