我收到帖子后,如何调整到更小的宽度(最大宽度为80,最小也为80),为了安全起见,我应该检查什么?
我目前的代码:
if(!empty($_FILES)) {
# Resize Image function
$return=true;
function resizeImage($originalImage,$toWidth,$toHeight){
// Get the original geometry and calculate scales
list($width, $height) = getimagesize($originalImage);
$xscale=$width/$toWidth;
$yscale=$height/$toHeight;
// Recalculate new size with default ratio
if ($yscale>$xscale){
$new_width = round($width * (1/$yscale));
$new_height = round($height * (1/$yscale));
}
else {
$new_width = round($width * (1/$xscale));
$new_height = round($height * (1/$xscale));
}
// Resize the original image
$imageResized = imagecreatetruecolor($new_width, $new_height);
$imageTmp = imagecreatefromjpeg ($originalImage);
imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
return $imageResized;
}
// Get the file information
$userfile_name = $_FILES['profile_picture']['name'];
$userfile_tmp = $_FILES['profile_picture']['tmp_name'];
$userfile_size = $_FILES['profile_picture']['size'];
$userfile_type = $_FILES['profile_picture']['type'];
$filename = basename($_FILES['profile_picture']['name']);
$file_ext = strtolower(substr($filename, strrpos($filename, '.') + 1));
//Only process if the file is a JPG and below the allowed limit
if((!empty($_FILES["profile_picture"])) && ($_FILES['profile_picture']['error'] == 0)) {
$allowed_image_types = array('image/pjpeg'=>"jpg",'image/jpeg'=>"jpg",'image/jpg'=>"jpg",'image/png'=>"png",'image/x-png'=>"png",'image/gif'=>"gif");
$allowed_image_ext = array_unique($allowed_image_types); // Do not change this
foreach ($allowed_image_types as $mime_type => $ext) {
if($file_ext==$ext ){
$return=false;
break;
} else {
$return=true;
}
}
if ($userfile_size > (7*1048576)) { # 7 means 7 mb
$return=false;
}
} else {
$return=false;
}
//Everything is ok, so we can upload the image.
if (strlen($return)==0){
$widthAndHeight = getimagesize($userfile_tmp . "." . $file_ext); //EDITED QUESTION
$width = $widthAndHeight[0];
$height = $widthAndHeight[1];
if ($width > 80){
$scale = 80/$width;
$height = $height * $scale;
$data = resizeImage($userfile_name,80,$height,$scale);
$data = mysql_real_escape_string($data);
} else {
$data = mysql_real_escape_string($userfile_name);
}
$update = mysql_query("UPDATE `avatar` set image = '{$data}' WHERE userid = '" . $_SESSION['userid'] . " . '");
} else {
$return=false;
}
mysql数据库中的数据类型是MediumBlob,因为它只存储小文件
很抱歉没有提到我的问题,代码无效。错误是:
Warning: getimagesize(C:\wamp\tmp\php991B.tmp.png) [function.getimagesize]: failed to open stream: No such file or directory in C:\wamp\www\XXX\avatar.php on line 82**strong text**
答案 0 :(得分:4)
更好的方法是 - 将图像存储在文件系统中并将ref存储到数据库中的文件中。 (对于调整大小,您可以使用GD库)
试试此链接:http://www.php.net/manual/en/function.imagecopyresized.php
答案 1 :(得分:0)
如果您真的不需要为此编写自己的代码,可以尝试一些已经存在的解决方案。
这是一个很棒的剧本 http://phpthumb.gxdlabs.com/
我不确定您是否可以使用它将图像数据保存到数据库,但最糟糕的情况是
您调整图像大小并将其保存到本地文件夹 使用file_get_contents读取图像并保存到db 删除服务器上的临时图像。
但我同意那些说你应该将图像存储在文件系统而不是数据库中的人。