以下是手册中提供的代码:
// Does file have the given hash?
$validator = new \Zend\Validator\File\Md5('3b3652f336522365223');
我不太清楚如何将其用作Zend Form
内的文件验证程序。如何在文件尚未上传时预先填充哈希值?
答案 0 :(得分:1)
你不是。散列验证器用于确保上载的文件具有提供的散列。即您已经知道文件的哈希值(文件已经上传,您已经从第三方获取了哈希值,或者文件的预期哈希值包含在请求中),并且想要验证上传的文件具有相同的哈希值。
请参阅示例How to calculate the MD5 hash of a file using javascript,了解如何提供预期的MD5哈希以及上传的文件,以验证文件是否已正确上传。
然后问题就变成你要解决的问题了 - 如果在上传文件时请求被中止,大多数服务器将取消请求(因此通常不会将不完整的文件传递给您的代码)。
答案 1 :(得分:1)
一般来说,\Zend\Validator\File\Md5
在网络表单中不会非常有用。
用户必须在单独的字段上提供MD5哈希,或者您必须在提交表单之前通过javascript动态计算它。在任何一种情况下,您都无法真正使用"验证"该文件,因为您要么依赖该文件来提供验证哈希,并且无法验证上传是否完成(如果上传失败,请求将被中止,您将无法访问不完整的文件)
您可能可以用来验证某种服务器启动的下载。例如。您可以在代码中的某个位置下载文件,然后在某处单独访问您要下载的文件的哈希值:然后您可以使用\Zend\Validator\File\Md5
来验证其真实性/完整性。
E.g:
$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
}