我有一個包含圖像上傳和輸入文本框的表單。用戶將能夠上傳圖像並輸入文本,而無需使用Ajax刷新頁面。該圖像將被轉發到PHP,PHP將處理如何處理圖像。我的問題是,用戶第一次上傳圖片時,會檢查服務器上是否有相同的圖片名稱。如果是這樣,圖像名稱將得到一個uniqid(),然後將被上傳。但是,如果用戶更改了文本框字段中的數據,但保留了圖像呢?然後,該圖像將再次使用uniqid()上傳,因爲它已經在服務器上。我試着解決這個使用我當前的代碼爲圖像處理:檢測用戶是否正在上傳相同的圖像
PHP
$target_file = $_SERVER['DOCUMENT_ROOT'] . "/stories/media/images/$name";
if (isset($_SESSION["size"]))
{
$prevSize = $_SESSION["size"];
if (filesize($prevSize) != filesize($size))
{
if (@getimagesize($target_file) == true)
{
$ext = pathinfo($name, PATHINFO_EXTENSION);
$name = basename($name, "." . $ext);
$name = $name . uniqid() . "." . $ext;
$target_file = $_SERVER['DOCUMENT_ROOT'] . "/stories/media/images/$name";
}
}
}
else
{
$_SESSION["size"] = $size;
if (@getimagesize($target_file) == true)
{
$ext = pathinfo($name, PATHINFO_EXTENSION);
$name = basename($name, "." . $ext);
$name = $name . uniqid() . "." . $ext;
$target_file = $_SERVER['DOCUMENT_ROOT'] . "/stories/media/images/$name";
}
}
move_uploaded_file($tempName, $target_file);
不幸的是,這個代碼不喜歡的工作,我希望它。如果我連續兩次上傳同一張圖片,在同一個會話中,它不會覆蓋我之前的圖片。相反,它會以一個uniqid名稱放在服務器上。我究竟做錯了什麼?如果有更好的解決方法,我很想知道!
而不是生成一個唯一的ID,如何使用哈希像md5?這可以很容易地檢測到重複:散列上傳的圖像,檢查是否存在匹配哈希的文件名,是否存在,使用該文件,否則用散列保存圖像作爲文件名 – naomik