2012-09-17 54 views
1

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

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

这样所有的配置文件图像将最终具有相同的文件扩展名,我只是不知道如果改变这样的文件类型是一个好主意或不。

回答

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"); 
} 

?> 
+0

感谢伟大的答案,我给这个一杆:) +1功能。 – Josh