2012-04-14 81 views
1

我有一个名为'name = fileImage'的文件输入。现在我有如下,它检查是否文件中的文件夹(图像文件中)存在的PHP代码或不:如何上传具有不同文件名的文件

if (file_exists("ImageFiles/" . $_FILES["fileImage"]["name"])) 
    { 

    } 

我的问题是,如果一个文件并在文件夹中存在,怎么能编码,使得它仍然上传文件,但它给了它不同的文件名。也许像在文件名的末尾自动添加一个数字来给它一个不同的文件名?

+0

我认为上传的文件通常应该存储完全不同于其原始名称的名称。这样你可以防止信息泄漏(人们将链接从“myfile.txt”改为“test.txt”,“secret.doc”等等来查看其他人的文件),不必担心文件名中的国际字符,并避免在需要将文件复制到不同的文件系统时的复杂情况(例如,如果在同一文件夹中有“test.txt”和“Test.txt”,则复制到Windows进行开发将会搞乱。 – DCoder 2012-04-14 13:59:21

回答

6

$_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 
0

如果要重命名上传的文件到您自己选择的名称,你可以尝试

<?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 ++并找到一种方法来存储其值以备将来参考。

相关问题