更改上传图像的文件扩展名

时间:2012-09-17 18:51:55

标签: php file-upload

我正在创建一个Zend Framework应用程序,用户可以在其中上传配置文件图像。可接受的文件类型是png,jpg和gif。图像最终会以用户的ID +文件扩展名存储。

我想知道的是,用户上传png或gif文件,将文件扩展名更改为jpg是否安全?

这样所有个人资料图片最终都会有相同的文件扩展名,我只是不确定是否更改这样的文件类型是个好主意。

1 个答案:

答案 0 :(得分:2)

即使我从未尝试过,所以我不能说它是否真的有效,我认为更改文件扩展名不是一个好主意,因为如果Web服务器使用文件扩展名来确定响应的内容类型,浏览器无法显示图像 在我看来,您应该在上传后将gif / png图像转换为jpeg格式,然后最终移动,重命名或删除原始图像,只将转换后的jpg图像保留在上传文件夹中。
例如,如果您启用了GD extension,则可以执行以下操作:

<?php

/**
 * Convert gif or png image to jpg format
 *  
 * @param string  original image file name
 * @param int     output image quality (0..100) 
 * @return string output jpg file name
 */
function img2jpeg($filename, $quality = 100) {
    if (file_exists($filename) && is_readable($filename)) {
        $p = pathinfo($filename);
        $ext = strtolower($p['extension']);
        if ($ext == "jpg") {
            return($filename);
        } else if ($img = imagecreatefromstring(file_get_contents($filename))) {
            $newname = $p['dirname'].'/'.$p['filename'].'.jpg';
            if (imagejpeg($img, $newname, $quality)) {
                imagedestroy($img);
                return($newname);
            } else {
                imagedestroy($img);
                die("Error creating ".$newname."\n");
            }
        }
    }
    die("Error loading ".$filename."\n");
}

?>