PHP重命名上传的文件会破坏其扩展名

时间:2014-07-21 09:34:05

标签: php

在我的上传文件脚本中,我需要将上传的文件名(它们都是图片)更改为上传文件的用户的userId +其他一些内容。

我一切正常,但唯一的问题是当我使用move_uploaded_file并在那里指定一个新文件名时,我得到一个带有新名称但没有扩展名的文件。

无需为扩展程序编写更多代码,我可以使用新名称和原始扩展名获取文件名吗?

我目前正在做:

$tempFile = $_FILES["file"]["tmp_name"];
$newName = 'userId'.time() 

if(move_uploaded_file($tempFile,$root.'/images/'.$userId.'/'.$newName)) {

}

但以此结束...

enter image description here

这是相同的上传文件,但没有扩展名。如果我手动更改扩展名,我可以在那里看到图像。

4 个答案:

答案 0 :(得分:0)

您需要做的是首先从原始文件名中提取原始扩展名,然后将其添加到$ newname变量中。

名称需要包含扩展名,没有办法解决,如果你知道扩展名将永远是什么,你就是cvan

答案 1 :(得分:0)

试试这个

$tempFile = $_FILES["file"]["tmp_name"];
$file = explode('.', $_FILES["file"]["tmp_name"]);

$newName = 'userId'.time().'.'.$file[count($file)-1]; 

if(move_uploaded_file($tempFile,$root.'/images/'.$userId.'/'.$newName)) {

}

答案 2 :(得分:0)

将您的代码更改为:

$tempFile = $_FILES["file"]["tmp_name"];
$newName = 'userId'.time() . "." . substr($_FILES['file']['name'], strpos('.'), strlen($_FILES['file']['name']));

if(move_uploaded_file($tempFile,$root.'/images/'.$userId.'/'.$newName)) {

}

答案 3 :(得分:0)

您使用$newName = 'userId'.time()设置新文件名,为什么您对该名称感到惊讶?

要保留原始扩展名,首先需要找到它,然后将其添加到新文件名中。您可以使用Fileinfo PHP扩展来猜测文件扩展名:

$finfo    = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, $tempFile);
finfo_close($finfo);

// Set file extension & exif data, if any
$exif = array();
switch ($mimeType) {
    case 'image/png':
        $fileExtension = 'png';

        break;
    case 'image/gif':
        $fileExtension = 'gif';
        break;

    case 'image/jpg':
    case 'image/jpeg':
        $fileExtension = 'jpg';
        break;
}

然后,将扩展名添加到新名称:

$newName = 'userId' . time() . $fileExtension;