获取非常大的文件的MD5校验和

fny*_*fny 8 php hash checksum md5

我编写了一个脚本,它读取目录中的所有文件,并为每个文件返回md5哈希值.但是,它不会为相当大的文件呈现任何内容.我假设解释器为最大处理时间设置了一些值,并且由于获取此值需要很长时间,因此它只是跳到其他文件.无论如何通过PHP获取大文件的md5校验和?如果没有,是否可以通过cpanel的chron工作完成?我在那里试了一下,但似乎我的md5sum命令似乎没有被处理过:我从未收到过带有哈希的电子邮件.这是我已经写过的PHP.对于合理大小的文件,这是一个非常简单的代码和工作文件:

function md5_dir($dir) {
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                echo nl2br($file . "\n" . md5_file($file) . "\n\n");
            }
            closedir($dh);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 9

如果您决定使用shell_exec()或system()调用,请务必使用escapeshellarg(http://us3.php.net/manual/en/function.escapeshellarg.php).也就是说,

shell_exec('md5sum -b ' . escapeshellarg($filename));
Run Code Online (Sandbox Code Playgroud)


edo*_*ian 3

虽然我无法使用 PHP 5.2 或 5.3 的 2GB 文件重现它,但问题似乎出现在 32 位 PHP 构建上。

即便如此,这并不是一个很好的解决方案,您可以尝试让系统自行解决

echo system("md5sum test.txt");
Run Code Online (Sandbox Code Playgroud)

46d6a7bcbcf7ae0501da341cb3bae27c测试.txt