Рекурсивный просмотр всех каталогов серверов и список новейших созданных файлов с php

очень распространенный вопрос и до сих пор не нашел правильного решения для этого. Мне нужно запустить задание cron, чтобы запустить php-скрипт каждое утро, чтобы перечислить все новые файлы, созданные на веб-сервере в течение ночи. Это очень полезно, чтобы посмотреть, какие посетители загрузили в ночное время, и, конечно же, эти файлы могут быть вредоносными файлами, что повредит другим компьютерам-посетителям. Пока у меня это:

$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/folder/и т. д. Как это сделать recusrsivly? Если я добавлю новый файл в root/folder, скрипт покажет мне папку с датой, но не покажет, какой файл в корне/папке был создан. Надеюсь, вы понимаете, что я имею в виду, спасибо

0
nl ja de
Я бы попробовал сделать ваш чек, когда пользователь загрузит файл.
добавлено автор Benjamin Crouzier, источник
это не так просто, когда мы говорим о 300-400 файлах ..
добавлено автор thecore7, источник

1 ответы

Быстрый скрипт, который делает то, что вы хотите (протестирован под 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 
$>
3
добавлено
@ МариянМаринов напечатать $ filename перед if (filemtime ($ filename)> $ since) и посмотреть, что произойдет.
добавлено автор Benjamin Crouzier, источник
Проверьте stackoverflow.com/questions/4401320/& hellip; и stackoverflow.com/questions/2084986/file-creation-time для получения времени создания файла
добавлено автор Benjamin Crouzier, источник
chears pinouchon, но я получаю эту ошибку. Fatal error: Class 'FilesystemIterator' не найден. Я использую PHP 4
добавлено автор thecore7, источник
да, работает, но не рекурсивно в папках
добавлено автор thecore7, источник
Извините pinouchon, вы правы, я меняю смену на 1 секунду, и поэтому не видел всех файлов, но возможно ли показать время создания файла?
добавлено автор thecore7, источник
Я считаю, что это ответят :)) очень хороший человек! ты защитил свой день :)
добавлено автор thecore7, источник
+1, но зачем использовать filemtime() , когда вы используете классы SPL? Вы можете использовать $ filename-> getMTime() . Я также предпочел бы увидеть объект DateTime вместо strtotime() . Но +1 в любом случае, потому что это в значительной степени то, что я бы сделал.
добавлено автор SDC, источник
@ Мариян Маринов - FilesystemIterator встроен в PHP 5.3 и выше См. php.net/manual/en/class.filesystemiterator.php . Если вы используете более старую версию, вам следует обновить ее, поскольку ничего более 5,3 не поддерживается. Но если вы не можете обновить, этот ответ все равно можно использовать без бита FilesystemIterator .
добавлено автор SDC, источник
версия PHP?
добавлено автор Blacksonic, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp