我有一段简单的代码用于上传php / mysql中的文件,效果很好。
$target = "uploads/clients/";
$target = $target . basename( $_FILES['photo']['name']);
$pic=($_FILES['photo']['name']);
//Writes the photo to the server
if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))
{
$insertSQL = sprintf("INSERT INTO clients (img, `cname`) VALUES (%s, %s)",
GetSQLValueString($pic, "text"),
GetSQLValueString($_POST['cname'], "text"));
mysql_select_db($database_thebest, $thebest);
$Result1 = mysql_query($insertSQL, $thebest) or die(mysql_error());
现在我想要的是重命名文件名,如果该文件名已经存在,然后将重命名的文件名插入数据库
感谢您的回复
答案 0 :(得分:1)
试试这个......
$upload_dir = "uploads/clients/";
$target = $upload_dir . basename( $_FILES['photo']['name']);
while(file_exists($target)){
$new = time().rand();
$target = $upload_dir . '_' . $new . '_' . basename( $_FILES['photo']['name']);
}
// rest of the code now...
$pic= $new . ($_FILES['photo']['name']);
答案 1 :(得分:1)
你可以通过多种方式实现。
方法1
在保存到服务器之前检查file_exists()
:
if (file_exists("../img/imageDirectory/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $_FILES["file"]["name"]);
// Others insert statements here...
}
方法2
使用microtime()
为每个文件生成唯一名称:
$temp = explode(".",$_FILES["file"]["name"]);
$newfilename = substr(microtime(), 2, 7) . '.' .end($temp);
move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newfilename;
mysql_*个函数。不要再使用它们了。
答案 2 :(得分:0)
运行SELECT查询以检查名称是否存在。如果没有,请插入它。因此,从您的表中选择名称=您的文件名的所有内容。如果是numrows> 0你改了名字。
实际上,为什么不使用自动增量值作为名称,并在单独的列中存储您想要调用它的任何内容。然后你会知道每个名字都会有所不同,你也不会有疯狂的长网址或文件名。
答案 3 :(得分:0)
首先,你必须检查表,该文件名已经存在或不存在。
select * from client where cname="filename";
如果存在filename,则必须更改文件名。