2011-08-23 41 views
3

我使用这个功能来上传我的文件:PHP上传文件,并给一个自定义名称

if ((($_FILES["Artwork"]["type"] == "image/gif") 
|| ($_FILES["Artwork"]["type"] == "image/jpeg") 
|| ($_FILES["Artwork"]["type"] == "image/jpg") 
|| ($_FILES["Artwork"]["type"] == "image/pjpeg")) 
&& ($_FILES["Artwork"]["size"] < 20000000)) 
    { 
    if ($_FILES["Artwork"]["error"] > 0) 
    { 
    //echo "Return Code: " . $_FILES["Artwork"]["error"] . "<br />"; 
    }else{ 
     $imageName = $_FILES['Artwork']['name']; 
     move_uploaded_file($_FILES["Artwork"]["tmp_name"], 
     $path_image . $imageName); 
     } 
    }else{ 
    //echo "invalid file"; 
    } 

如何更改$imageName = $_FILES['Artwork']['name'];使用自定义名称,但是mantaining在名称中的文件扩展名,因此,例如:myCustomName.jpg

谢谢!

+1

不要使用'[ '型']'场。这是用户提供的数据,很容易伪造。使用服务器端的东西,如[FileInfo](http://php.net/fileinfo)来获取MIME类型。仍然不是100%,但比'['type']'字段的0%可靠性好得多。 –

回答

7

你在你的代码需要修改的唯一行是:“CustomName”

$imageName = 'CustomName.' . pathinfo($_FILES['Artwork']['name'],PATHINFO_EXTENSION); 

在哪里是您想要的图像的新名称。 pathinfo如果PHP函数处理与路径和文件名称的操作。

你整个代码将是:

if ((($_FILES["Artwork"]["type"] == "image/gif") 
|| ($_FILES["Artwork"]["type"] == "image/jpeg") 
|| ($_FILES["Artwork"]["type"] == "image/jpg") 
|| ($_FILES["Artwork"]["type"] == "image/pjpeg")) 
&& ($_FILES["Artwork"]["size"] < 20000000)) 
    { 
    if ($_FILES["Artwork"]["error"] > 0) 
    { 
    //echo "Return Code: " . $_FILES["Artwork"]["error"] . "<br />"; 
    }else{ 
     $imageName = 'CustomName.' . pathinfo($_FILES['Artwork']['name'],PATHINFO_EXTENSION); 
     move_uploaded_file($_FILES["Artwork"]["tmp_name"], 
     $path_image . $imageName); 
     } 
    }else{ 
    //echo "invalid file"; 
    } 
+1

+1。建议使用'pathinfo'函数。 – diosney

1
$ext = last(explode('.', $_FILES['Artwork']['name'])); 
$custom_name = 'something'; 
$imageName = $custom_name.'.'.$ext; 
0

我觉得你让它太复杂了。这是由点分割的文件名,并使用最后一个元素一样简单:

$parts = explode('.', $_FILES['Artwork']['name']); 
$newname = "myCustomName" . (size($parts) > 1 ? '.' . last($parts) : '')