Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保存PHP之前图像的唯一名称_Php_Mysql - Fatal编程技术网

保存PHP之前图像的唯一名称

保存PHP之前图像的唯一名称,php,mysql,Php,Mysql,如何为图像设置唯一的名称?我试图使用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 su

如何为图像设置唯一的名称?我试图使用
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之类的

更新:

我只是使用

$tname =  uniqid().$name;

无法使用
tempnam()
指定扩展名。不幸的是,这是事实

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

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

如果你不太在意可能的,但不太可能的比赛条件,我建议你也使用这样的方式:

$filename = 'images/' . uniqid() . '.jpg';

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

$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
}
$allowedExts=array(“gif”、“jpeg”、“jpg”、“png”);
$extension=end(分解(“.”,$_文件[“文件”][“名称]);
如果(($_文件[“文件”][“类型”]=“图像/gif”)
|| 
($_文件[“文件”][“类型”]=“图像/jpeg”)
||
($_文件[“文件”][“类型”]=“图像/jpg”)
||
($_文件[“文件”][“类型”]=“图像/png”))
&&
($_文件[“文件”][“大小”]<10485760)和&in_数组($extension,$allowedExts)){
//做
}

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

无法使用
tempnam()
指定扩展名。不幸的是,这是事实。那么,如果没有这个,我怎么能设置一个唯一的名称。但是有人告诉我,很容易“伪造”扩展名,所以这就是为什么我需要检查“mime类型”的原因,我想,这是真的吗?对不起,我没有看到字体部分你知道我为什么会。。严格标准:只能通过引用传递变量in@DreaminMediaQueretaro注意:虽然很容易伪造扩展名,但也很容易伪造mime类型。当涉及到安全检查时,您不能依赖此信息。只需将这些文件作为不受信任的数据处理是的,我只看到了你的答案,但是的,搜索时我发现了一个类似的问题解决程序,使用uniqid(),但真的很感谢你这么好的解释,我真的很想知道为什么