0

非常に一般的な質問ですが、それでもこれに対する正しい解決策は見つかりませんでした。cronジョブを実行して、毎朝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);    

これにより、最新のファイルが1つのディレクトリroot /にのみ出力され、たとえばroot /folder/などはチェックされません。ルート/フォルダ内に新しいファイルを追加すると、スクリプトには日付のあるフォルダが表示されますが、ルート/フォルダ内のどのファイルが作成されたかは表示されません。意味を理解していただければ幸いです。ありがとうございます。

4

1 に答える 1

3

必要なことを実行するクイックスクリプト(cygwinを使用するWindows7およびPHP5.3.10を使用するubuntu12.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 
$>
于 2013-01-29T10:24:22.473 に答える