1
我正在创建一个Zend Framework应用程序,用户可以在其中上载配置文件图像。可接受的文件类型是png,jpg和gif。图像最终以用户的ID +文件扩展名的形式存储。更改上传图像的文件扩展名
我想知道的是,如果用户上传了png或gif文件,将文件扩展名更改为jpg安全吗?
这样所有的配置文件图像将最终具有相同的文件扩展名,我只是不知道如果改变这样的文件类型是一个好主意或不。
我正在创建一个Zend Framework应用程序,用户可以在其中上载配置文件图像。可接受的文件类型是png,jpg和gif。图像最终以用户的ID +文件扩展名的形式存储。更改上传图像的文件扩展名
我想知道的是,如果用户上传了png或gif文件,将文件扩展名更改为jpg安全吗?
这样所有的配置文件图像将最终具有相同的文件扩展名,我只是不知道如果改变这样的文件类型是一个好主意或不。
即使我从来没有试过这样做,所以我不能说它是否真的有效,我认为改变文件扩展名不是一个好主意,因为如果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");
}
?>
感谢伟大的答案,我给这个一杆:) +1功能。 – Josh