php – 哪个更好:sha1_file(f)或sha1(file_get_contents(f))?
发布时间:2020-12-13 17:46:07 所属栏目:PHP教程 来源:网络整理
导读:我想创建一个大小至少为5Mb的文件的哈希值,并且可以扩展到1-2 Gb.现在,在这两种方法之间出现了艰难的选择,尽管它们完全相同. Method 1: sha1_file($file)Method 2: sha1(file_get_contents($file)) 我尝试过10 Mb,但性能没有太大差异. 但是在更高的数据规模
我想创建一个大小至少为5Mb的文件的哈希值,并且可以扩展到1-2 Gb.现在,在这两种方法之间出现了艰难的选择,尽管它们完全相同.
Method 1: sha1_file($file) Method 2: sha1(file_get_contents($file)) 我尝试过10 Mb,但性能没有太大差异. 解决方法
除非有令人信服的理由,否则请使用提供的最高级别表格.
在这种情况下,正确的选择是sha1_file.因为sha1_file是一个只适用于文件的高级函数.这种“限制”允许它利用文件/源可以作为stream1处理的事实:一次只有一小部分文件被读入内存. 第二种方法保证5MB-2GB的内存(文件的大小)被浪费/使用,因为file_get_contents在生成哈希之前将所有内容读入内存.随着文件大小的增加和/或系统资源的限制,这会对性能产生非常不利的影响. 1 sha1_file的源可以是found on github.这是一个提取,仅显示与流处理相关的行: PHP_FUNCTION(sha1_file) { stream = php_stream_open_wrapper(arg,"rb",REPORT_ERRORS,NULL); PHP_SHA1Init(&context); while ((n = php_stream_read(stream,buf,sizeof(buf))) > 0) { PHP_SHA1Update(&context,n); } PHP_SHA1Final(digest,&context); php_stream_close(stream); } 通过使用更高级别的函数,适当实现的责任放在库的开发人员身上.在这种情况下,它允许使用缩放流实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |