在有人标记这个问题为重复之前,请理解我已经在本网站、Google搜索和PHP.net上进行了搜索。
我想要的非常简单。我想要一个包含日期戳(最后修改时间)的网站所有文件列表。我找到了几个声称可以做到这一点的脚本,但它们都无法正常工作。
到目前为止,我发现的最好的一个是这个:
header("Pragma: public");
header("Cache-Control: private");
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=age-of-files.csv");
$result = array();
$handle = opendir(".");
while ($datei = readdir($handle))
{
if (($datei != '.') && ($datei != '..'))
{
$file = "./".$datei;
if (!is_dir($file))
$result[] = $file;
}
}
closedir($handle);
foreach($result as $r)
if (file_exists($r))
echo substr($r,2).",".date ("m-d-Y", filemtime($r))."\r\n";
这对于脚本运行的目录非常有效,但它不是递归的。我需要它继续每个子目录。我的目标是拥有一个可排序的列表,以便我可以找到在某些日期前后修改的文件。
我是PHP新手,请多包涵。我在PHP.net进行了一些研究(我不断看到人们提到SPL,我不确定它代表什么或者它是什么,但也许它是一组标准的PHP类?),看起来我需要以某种方式使用RecursiveDirectoryIterator。
我发现这个脚本在纸上看起来很棒,但在我的网站上运行它只会出现一个空白屏幕。
try
{
/*** freds home directory ***/
$rdi = new recursiveDirectoryIterator('/', FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS);
$it = new recursiveIteratorIterator( $rdi );
while( $it->valid())
{
if( !$it->isDir() )
{
echo $it->current().' '.date('Y m d H:i:s', $it->getATime() )."\n";
}
/*** move to the next element ***/
$it->next();
}
}
catch(Exception $e)
{
/*** echo the error message ***/
echo $e->getMessage();
}
我更喜欢使用第一个脚本,因为它可以创建csv文件(易于排序),但我不确定如何将两个脚本融合在一起。请问有人能建议我如何将RDI整合到第一个脚本中吗?
FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS
- Sayed