Вот, пожалуйста:
$log = '/path/to/your/log.js';
$path = '/path/to/your/dir/with/files/';
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
$result = array();
foreach ($files as $file)
{
if (is_file($file = strval($file)) === true)
{
$result[$file] = sprintf('%u|%u', filesize($file), filemtime($file));
}
}
if (is_file($log) !== true)
{
file_put_contents($log, json_encode($result), LOCK_EX);
}
// are there any differences?
if (count($diff = array_diff($result, json_decode(file_get_contents($log), true))) > 0)
{
// send email with mail(), SwiftMailer, PHPMailer, ...
$email = 'The following files have changed:' . "\n" . implode("\n", array_keys($diff));
// update the log file with the new file info
file_put_contents($log, json_encode($result), LOCK_EX);
}
Я предполагаю, что вы знаете, как отправить электронное письмо.Кроме того, имейте в виду, что файл $log
должен храниться за пределами $path
, который вы хотите отслеживать, по понятным причинам, конечно.
После прочтения вашего вопроса во второй раз, я заметилчто вы упомянули, что хотите проверить, изменились ли файлы , я делаю эту проверку только с размером и датой изменения, если вы действительно хотите проверить, отличается ли содержимое файла, я предлагаю вам использоватьхеш файла, так что это:
$result[$file] = sprintf('%u|%u', filesize($file), filemtime($file));
Становится так:
$result[$file] = sprintf('%u|%u|%s', filesize($file), filemtime($file), md5_file($file));
// or
$result[$file] = sprintf('%u|%u|%s', filesize($file), filemtime($file), sha1_file($file));
Но стоит помнить, что это будет намного дороже, так как хэш-функции должны открывать и читать всесодержимое ваших CSV-файлов объемом 1-5 МБ.