嗨我想上传服务器上的图像而且我已经完成了但是问题是当我上传具有相同名称的图像时它会给我错误我要做的是将某些内容添加到图像名称的末尾以便每个图像都有它自己独特 名。
$TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name']); if (file_exists($TARGET_PATH)) { // here will be the appended term }
答案 0 :(得分:3)
当文件已存在且名称相同时,您不应该收到错误。 我认为你的问题应该是别的。
但如果更改名称只是解决您的问题,您也可以使用时间戳并将其添加到您的文件名中,这是唯一的。
function uniqueName($filename){
$f = explode('.', $filename);
$ext = $f[count($f)-1];
return implode('.', $f).time().'.'.$ext;
}
此功能适用于所有扩展程序。
答案 1 :(得分:1)
你应该这样做:
$TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name']);
while (file_exists($TARGET_PATH))
{
$TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name'],'.jpg') . uniqid() . '.jpg';
}
这样它总会产生一个唯一的文件名。请注意,这适用于扩展名为jpg的文件。如果你想将它用于其他文件,那么我会推荐这个:
$TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name']);
$ext = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
while (file_exists($TARGET_PATH))
{
$TARGET_PATH =$TARGET_PATH . basename( $_FILES['photo']['name'],'.' .$ext) . uniqid() . '.'.$ext;
}
为basename提供扩展名将从名称中删除扩展名。 添加uniqid()会在文件名末尾添加一些唯一的熵。如果您愿意为此而烦恼,可以将其替换为rand(0,10);
此方法还具有仅在发现文件存在时才执行的优点,否则它将无法运行。
答案 2 :(得分:0)
考虑一个返回唯一名称的函数 - 比如(未经测试且非常容易改进):
<?php
// ...
function getUniqueFilename($targetPath = '.', $extension = 'jpg') {
$uniqueFilename = sha1(time() . mt_rand(1, 150)) . '.'. $extension;
if(file_exists($targetPath . $uniqueFilename)) {
getUniqueFilename($targetPath, $extension);
} else {
return $uniqueFilename;
}
}
// and you call it like
$newFilename = getUniqueFilename('.', 'gif');
?>
就像一个想法; - )