下面是提供的手冊上的代碼:確定的文件哈希值與Zend使用前驗證MD5
// Does file have the given hash?
$validator = new \Zend\Validator\File\Md5('3b3652f336522365223');
我不太瞭解如何使用這個作爲我Zend Form
中的文件驗證。當文件尚未上傳時,如何預填充散列?
下面是提供的手冊上的代碼:確定的文件哈希值與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
}