如何为图像设置唯一名称?我正在尝试使用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."')");
// ...
另外,我如何检查(为了安全起见)图像是否已真正发布?像 mime type 或类似的东西。
更新:
我只是使用
修复唯一名称$tname = uniqid().$name;
答案 0 :(得分:1)
使用tempnam()
指定扩展程序是不可能的。不幸的是,这是事实。
虽然您描述的问题听起来像是一个易于解决的问题,但是避免可能的竞争条件(不使用tempnam()
)会有问题。虽然它们不太可能出现,但仍有可能。
如果您确定只有PHP在该目录中工作,您可以实现基于flock()
的机制,以确保只创建一次文件。
如果你不太关心可能的,但不太可能,竞争条件,我建议你也使用这样的东西:
$filename = 'images/' . uniqid() . '.jpg';
答案 1 :(得分: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附加为文件名!