Après avoir reçu le post, comment redimensionner à une plus petite largeur (la largeur maximale est 80, min aussi 80) et que dois-je vérifier pour des raisons de sécurité?PHP redimensionner l'image avant de sauvegarder dans la base de données mysql?
Mon code actuel:
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;
}
Le type de données dans la base de données MySQL est MEDIUMBLOB car il stocke seulement petit fichier
Désolé pour ne pas mentionner mon problème, le code de son ne fonctionne pas. L'erreur est:
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**
votre problème n'a rien à voir avec la base de données. il est dit "fichier introuvable". Vérifiez le chemin du fichier. –
Avoir des fichiers stockés dans la base de données, vous devez démarrer un processus PHP séparé pour servir chaque image sur la page et faire une autre connexion à la base de données. C'est un surcoût inacceptable pour le développement web. Toutes les données statiques telles que les images doivent être traitées telles quelles, et non via une page dynamique. –