Итак, у меня есть каталог, в котором я получаю хэши для всех файлов в каталоге при записи/добавлении хэшей для каждого файла в текстовый документ, который я получаю в том же хэше 10-100 раз в документе, и я не могу понять, почему php продолжает это делать.PHP foreach duplicate looping issue
Любой может запустить это в окнах, чтобы убедиться, что certutil, который выполняет скрипт, встроен в окна, поэтому он будет работать на любой машине Windows.
<?php
$file_path = 'C:\Users\C0n\Desktop\hash-banned.txt';
foreach (glob("R:\backup\Videos\*") as $filename) {
exec('CertUtil -hashfile "'.$filename.'" SHA1', $response);
$str = str_replace(' ', '', $response[1]);
$find_hashes = file($file_path,FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($find_hashes as $n1) {
if($str == $n1) {
echo "duplicate detected";
break;
}
echo "Hash does not exist so adding " . $str;
//hash not found so add to file
//if hash string is not empty then write to file
if ($str != "") {
file_put_contents($file_path, $str . "\n", FILE_APPEND);
}
}
}
?>
Я покинул первую строку find_hash с пространством, поэтому его технически не пусто. Кроме того, причина, по которой я использую «certutil.exe» вместо встроенного в sha1_file php, состоит в том, что файлы имеют размер более 2 ГБ, а php не может читать файлы размером более 2 ГБ на окнах. – C0nw0nk
@ C0nw0nk Я понимаю, я пошел с sha1_file только для целей тестирования. Вы можете использовать certutil.exe. Он все еще порождает повторяющийся хеш? – JungleZombie
Да, похоже, что это было трюк благодаря JungleZombie :) было так встревожено, что никогда не сталкивался с этой проблемой раньше. – C0nw0nk