非常常见的问题,但仍未找到合适的解决方案。我需要每天早上运行cron job来启动php脚本,以列出在夜间在Web服务器上创建的所有新文件。这非常有用,可以看到访问者在夜间上传的内容以及那些文件可能是有害的文件,这些文件会伤害其他访问者的计算机。到目前为止,我有这个:
$dir = "../root/";
$pattern = '\.*$'; // check only file with these ext.
$newstamp = 0;
$newname = "";
if ($handle = opendir($dir)) {
while (false !== ($fname = readdir($handle))) {
// Eliminate current directory, parent directory
if (ereg('^\.{1,2}$',$fname)) continue;
// Eliminate other pages not in pattern
if (! ereg($pattern,$fname)) continue;
$timedat = filemtime("$dir/$fname");
if ($timedat > $newstamp) {
$newstamp = $timedat;
$newname = $fname;
}
}
}
closedir ($handle);
// $newstamp is the time for the latest file
// $newname is the name of the latest file
// print last mod.file - format date as you like
print $newname . " - " . date( "Y/m/d", $newstamp);
这打印最新的文件,但只在一个目录root /并没有检查例如root /文件夹/等。如何进行recusrsivly? 如果我在root /文件夹中添加一个新文件,脚本会显示带有日期的文件夹,但不会显示root /文件夹中的哪个文件被创建..我希望你明白我的意思,谢谢
答案 0 :(得分:3)
执行您想要的快速脚本(在Windows 7下使用cygwin和ubuntu 12.10 使用PHP 5.3.10进行测试)
<?php
$path = $argv[1];
$since = strtotime('-10 second'); // use this for previous day: '-1 day'
$ite = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
foreach ( new RecursiveIteratorIterator($ite) as $filename => $object ) {
if (filemtime($filename) > $since) {
echo "$filename recently created\n";
}
}
我的快速测试:
$> mkdir -p d1/d2
$> touch d1/d2/foo
$> php test.php .
./d1/d2/foo recently created
$> php test.php . # 10secs later
$>