我有一个名为'name = fileImage'的文件输入。现在我有如下,它检查是否文件中的文件夹(图像文件中)存在的PHP代码或不:如何上传具有不同文件名的文件
if (file_exists("ImageFiles/" . $_FILES["fileImage"]["name"]))
{
}
我的问题是,如果一个文件并在文件夹中存在,怎么能编码,使得它仍然上传文件,但它给了它不同的文件名。也许像在文件名的末尾自动添加一个数字来给它一个不同的文件名?
我有一个名为'name = fileImage'的文件输入。现在我有如下,它检查是否文件中的文件夹(图像文件中)存在的PHP代码或不:如何上传具有不同文件名的文件
if (file_exists("ImageFiles/" . $_FILES["fileImage"]["name"]))
{
}
我的问题是,如果一个文件并在文件夹中存在,怎么能编码,使得它仍然上传文件,但它给了它不同的文件名。也许像在文件名的末尾自动添加一个数字来给它一个不同的文件名?
$_FILES
只是一个变量,恰好是超全球性的,并预先填充了文件上传数据。意思是你可以很容易地改变它。
例如:
if(file_exists("ImageFiles/".$_FILES['fileImage']['name'])) {
$parts = explode(".",$_FILES['fileImage']['name']);
$ext = array_pop($parts);
$base = implode(".",$parts);
$n = 2;
while(file_exists("ImageFiles/".$base."_".$n.".".$ext)) $n++;
$_FILES['fileImage']['name'] = $base."_".$n.".".$ext;
}
// now use $_FILES['fileImage']['name'] just like you would normally
如果要重命名上传的文件到您自己选择的名称,你可以尝试
<?php
//Any file name user/uploader has chosen/used on his/her computer
$tmp_name = $_FILES["domainfile"]["tmp_name"];
//Name you want
$name = "MyDesiredName.png"; //save as MyDesiredName.png
//Move/save file
move_uploaded_file($tmp_name, $name);
?>
显然这个代码将取代旧的文件,每次一新文件被上传。
为了不让这种情况发生,您需要在$ name
中引入一些变量并执行$ name ++并找到一种方法来存储其值以备将来参考。
我认为上传的文件通常应该存储完全不同于其原始名称的名称。这样你可以防止信息泄漏(人们将链接从“myfile.txt”改为“test.txt”,“secret.doc”等等来查看其他人的文件),不必担心文件名中的国际字符,并避免在需要将文件复制到不同的文件系统时的复杂情况(例如,如果在同一文件夹中有“test.txt”和“Test.txt”,则复制到Windows进行开发将会搞乱。 – DCoder 2012-04-14 13:59:21