我有一个包含图像上传和输入文本框的表单。用户将能够上传图像并输入文本,而无需使用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