2015-06-12 3 views
1

Мне нужен разумный способ использовать PHP для проверки целостности большого количества файлов, которые находятся ниже каталога на определенном сервере (большое количество здесь означает 6000 и более).Как проверить целостность связки файлов?

В принципе, я хочу знать, были ли они изменены. Решение, которое я придумал, чтобы вычислить значение хэш всех файлов следующим образом:

$accnum = 1; 
$modulo = PHP_INT_MAX >> 5; 
foreach ($files as $file) { 
    $crc32 = crc32(md5_file($file)); 
    $accnum = ($accnum % $modulo) * 31 + $crc32; 
} 
$hash = md5($accnum); 

я затем записать хэш где-то злоумышленник не может добраться до него.

Затем, чтобы проверить фальсификацию, я пересчитываю хэш и сравниваю его с записанным значением. Если он отличается, я знаю, что по крайней мере один из файлов был изменен.

Вопросы:
- Это разумный способ сделать это?
- Если нет, как мне контролировать целостность большого количества файлов?

+0

Чтобы ускорить процесс, вы также можете сохранить последнюю измененную дату файла и сравнить только хэш, если дата изменилась. Это должно ускорить приложение, поскольку проверка даты должна быть менее трудоемкой, чем проверка хэша. Я не знаю, является ли это лучшим решением для вашего дела, но это то, что нужно учитывать. – Adon

+0

Другая возможность - «посмотреть» каталог для событий «файловой системы». Может быть полезно что-то вроде [inotify-tools] (https://github.com/rvoicilas/inotify-tools/wiki)? –

+0

Ваш метод hash будет работать нормально. Также сохраняйте «автономные резервные копии» своего собственного веб-сайта, а также «резервные копии», предоставляемые «хостинг-провайдером». –

ответ

-1

Почему бы вам не использовать Git? Храните удаленный репозиторий, где ваш «злоумышленник» не может связаться и следить за локальными изменениями или сравнивать ваш код с удаленным репо.

+0

Я использую Git для мониторинга локальных изменений для этого в некоторых других контекстах. В этом случае я хочу только отслеживать подмножество файлов, и сохранение '.gitignore' было бы кошмаром. (Я не являюсь нисходящим.) –

+0

No prob. Я считаю, что git - отличный способ отслеживать изменения и в то же время проверять целостность, потому что все в git проверяется с помощью хэша SHA-1, и реализация выполняется очень быстро. Вы также можете выбрать белые списки в .gitignore. – Panayotis

Смежные вопросы