PHP foreach重复循环问题

时间:2015-07-04 01:47:01

标签: php loops duplicates

所以我有一个目录,我在写入/将每个文件的哈希值添加到文本文档时,为目录中的所有文件获取哈希值我在文档中以相同的哈希结尾10-100次结束无法弄清楚为什么php继续这样做。

任何人都可以在Windows上运行它来自己查看脚本执行的certutil内置到windows中,以便它可以在任何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);
        }
    }
}
?>

1 个答案:

答案 0 :(得分:2)

如果文件为空,$ str如何最终写入文件?因为$ find_hashes也将为空,并且foreach将不会运行。 测试下面的代码,似乎与我一起正常工作。

    $str = sha1_file($filename);
    $find_hashes = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    // unsetting response returned by certutil
    // because exec() appends output lines to the end of the array
    unset($response);

    if (in_array($str, $find_hashes)) {
        echo "duplicate detected";
        continue;       
    }

    if ($str != "") file_put_contents($file_path, $str . "\n", FILE_APPEND);            
    echo "Hash does not exist so adding " . $str;