0

如何为图像设置唯一名称?我正在尝试使用tempnam(),但它总是将 URL 和文件保存为.tpm. 这是我的代码:

$file = $_FILES['file'];

$name = $file['name'];

$tname = tempnam("imagenes/", $name);

$path = "imagenes/" . basename($tname);
if (move_uploaded_file($file['tmp_name'], $path)) {
    // Move succeed.
} else {
    // Move failed. Possible duplicate?
}

$sql = mysql_query("INSERT INTO `productos` (`img`) VALUES ('".$path."')");
// ...

另外,如果图像确实已发布,我如何检查(以确保安全)?像哑剧类型或类似的东西。

更新:

我只是使用修复唯一名称

$tname =  uniqid().$name;
4

2 回答 2

1

使用 . 指定扩展是不可能的tempnam()。不幸的是,这是事实。

虽然您描述的问题听起来很容易解决,但避免可能的竞争条件(不使用tempnam())是有问题的。尽管它们不太可能出现,但可能性仍然存在。

如果您确定只有 PHP 在该目录中工作,您可以实现一个flock()基于机制来确保文件只会被创建一次。

如果您不太关心可能但不太可能的比赛条件,我建议您也使用这样的东西:

$filename = 'images/' . uniqid() . '.jpg';
于 2013-05-08T03:09:02.727 回答
1

要检查有效的图像和文件大小,

$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| 
($_FILES["file"]["type"] == "image/jpeg")
||
($_FILES["file"]["type"] == "image/jpg")
||
($_FILES["file"]["type"] == "image/png"))
&&
($_FILES["file"]["size"] < 10485760)&& in_array($extension, $allowedExts))                {

    //DO
}

对于独特的图像,我建议您将图像存储在新表中并附加 imade id 作为文件名!

于 2013-05-08T03:09:20.917 回答