2

ファイルが複数回保存されず、ファイルが失われないことを確認する必要があるすべてのアイデア (md5) の場合、2 番目のファイルは保存されません (私の目標は同じファイルをハードディスクに 2 回)

つまり、 あるユーザーが画像をアップロードし、その後別のユーザーが同じ画像をアップロードした場合、2 番目の画像を保存する必要はありません。2 番目の画像は既にハード ディスクに存在しているためです。これは私のコードです

$targetFolder = '/test/uploadify/uploads'; // Relative to the root
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;

$myhash = md5_file($_FILES['Filedata']['tmp_name']);
$temp = explode(".", $_FILES['Filedata']['name']);
$extension = end($temp);

$targetFile = rtrim($targetPath,'/') . '/' .$myhash.'.'.$extension;
if(file_exists($targetFile)){
    echo 'exist';
}

// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
    move_uploaded_file($tempFile,$targetFile);
} 
else {
    echo 'Invalid file type.';
}

皆さんに感謝します

4

4 に答える 4

3

もちろん、これを行うこともできます。実際、これはファイルの重複を避けるために私が使用している方法です (つまり、2 つのファイルに同じ内容が含まれないようにし、ばかげた名前の衝突だけではありません)。

衝突が心配な場合は、sha1_file を確認してください。

http://es1.php.net/manual/en/function.sha1-file.php

2 つのメッセージが同じ MD5 ダイジェストと同じ SHA1 ダイジェストを持つ可能性は?

ここで画像ギャラリーに提案している方法で md5 アプローチを使用してきましたが、問題なく機能します。

もう 1 つ気を付けなければならないのは、ハッシュの計算にかかる時間です。ハッシュが複雑になればなるほど、必要な時間も長くなりますが、ここでは、非常に大きなバッチの処理について説明します。

于 2014-04-15T11:58:56.650 に答える
0

非常に小さいですが、チャンスはそこにあります。ここここでもっと読むことができます

ファイル名の最後にソルトを追加して、ファイルが競合することを実質的に不可能にすることをお勧めします (ただし、ソルトは別の md5 関数に配置する必要があります)。

$salt = md5(round(microtime(true) * 1000));
$hash = md5_file($_FILES['Filedata']['tmp_name']);
$targetFile = rtrim($targetPath,'/') . '/' .$hash.$salt.'.'.$extension;

後でアクセスできるように、ファイル名をデータベースに挿入する必要があります。

于 2014-04-13T09:06:30.180 に答える