确定的文件哈希值与Zend使用前验证MD5

确定的文件哈希值与Zend使用前验证MD5

问题描述:

下面是提供的手册上的代码:确定的文件哈希值与Zend使用前验证MD5

// Does file have the given hash? 
$validator = new \Zend\Validator\File\Md5('3b3652f336522365223'); 

我不太了解如何使用这个作为我Zend Form中的文件验证。当文件尚未上传时,如何预填充散列?

你不知道。散列验证器确保上传的文件具有提供的散列。即您已经知道该文件的散列(文件已被上传,您从第三方获取散列,或者文件的预期散列已包含在请求中),并且要验证上传的文件具有相同的散列。

例如参见How to calculate the MD5 hash of a file using javascript以了解如何提供期望的MD5散列以及上传的文件以验证文件是否已正确上传。

问题就变成了你要解决的问题 - 如果请求在文件上传时被中止,大多数服务器将取消请求(所以不完整的文件通常不会传递到您的代码中) 。

A \Zend\Validator\File\Md5,一般来说,在网络表单中不会很有用。

用户必须在单独的字段上提供MD5哈希,或者必须在提交表单之前通过JavaScript动态计算它。在任何一种情况下,都不能真正用于“验证”文件,因为要么依赖文件来提供验证散列,并且验证上传完成是没有用的(如果上载失败,请求将会是中止,你不会访问不完整的文件)。

您可能可以使用它来验证某种服务器启动的下载。例如。在您的代码中的某处您已经下载了一个文件,并且在某个地方可以访问您要下载的文件的散列值:然后您可以使用\Zend\Validator\File\Md5来验证真实性/完整性。

例如为:

$file_path = '/downloads/file.tgz'; 
$fp = fopen ($file_path, 'w'); 
$url = "http://remotehost/file.tgz"; 

$ch = curl_init($url); 

curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

$data = curl_exec($ch); 
curl_close($ch); 

// either you get the hash with a different request, or you've somehow obtained the hash previously 
$validator = new \Zend\Validator\File\Md5($hash); 

if (! $validator->isValid($file_path)) { 
// file isn't valid, do something about it 

}