sky_fox
Новичок
Обход папок: рекурсия или итерации
Вопрос следующий - есть массив эталонов вида (ключ - полный путь файла, значение - контрольная сумма файла).
Задача: обходить все папки на сервере и считать размеры и даты изменения файлов и сравнивать с эталоном.
Вопрос: что лучше - рекурсия или делать это итерациями.
Текущий код:
$data_array массив эталонов.
Проблем с ним на данный момент нет, но может ли возникнуть ситуация, что будучи запущенным по крону скрипт не выйдет из рекурсии и завесит сервер. При обходе, скажем 5000+ фолдеров с 1000 файлов в каждом
Вопрос следующий - есть массив эталонов вида (ключ - полный путь файла, значение - контрольная сумма файла).
Задача: обходить все папки на сервере и считать размеры и даты изменения файлов и сравнивать с эталоном.
Вопрос: что лучше - рекурсия или делать это итерациями.
Текущий код:
$data_array массив эталонов.
PHP:
function browseDir($dirname) {
global $extensions, $mb_hacked, $report, $data_array;
$dir = opendir($dirname);
while (($file = readdir($dir)) !== false) {
if ($file != "." && $file != "..") {
if(is_file($dirname . "/" . $file)) {
$file_parts = pathinfo($dirname . "/" . $file);
if (in_array($file_parts['extension'],$extensions)) {
$mtime = filemtime($dirname . "/" . $file);
$size = filesize($dirname . "/" . $file);
if (array_key_exists($dirname . "/" . $file,$data_array)) {
$hash = md5($mtime.$size.substr(md5($dirname . "/" . $file),0,-2));
if ($data_array[$dirname . "/" . $file] !== $hash) {
$mb_hacked = true;
$report .= 'File change warning: `' . $dirname . "/" . $file . '` Date modified: `' . date("d.m.Y H:i",$mtime) . "`\n";
}
} else {
$mb_hacked = true;
$report .= 'New file warning: `' . $dirname . "/" . $file . '` Date modified: `' . date("d.m.Y H:i",$mtime) . "`\n";
}
}
}
if(is_dir($dirname."/".$file)) {
browseDir($dirname."/".$file);
}
}
}
closedir($dir);
}
Проблем с ним на данный момент нет, но может ли возникнуть ситуация, что будучи запущенным по крону скрипт не выйдет из рекурсии и завесит сервер. При обходе, скажем 5000+ фолдеров с 1000 файлов в каждом