J'ai commencé par refaire l’indentation de ta fonction, même si PHP n'en a pas besoin, cela aide grandement pour comprendre un code
function upload_image($imageTmp,$image) {
if(file_exists($imageTmp)) {
$imageSize = getimagesize($imageTmp); // r'envoi la taille de l'image
if($imageSize['mime'] == 'image/jpeg') {
$imageSrc = imagecreatefromjpeg($imageTmp);
} elseif($imageSize['mime'] == 'image/png') {
$imageSrc = imagecreatefrompng($imageTmp);
} else if($imageSize['mime'] == 'image/gif') {
$imageSrc = imagecreatefromgif($imageTmp);
} else { //si c'est pas une image valide
echo "Votre image n'est pas valide";
$imageSrc = FALSE;
return false;//Si il y a erreur, on l'indique au nouveau nom pour que l'enregistrement en base ne se fasse pas
}
if($imageSrc !== FALSE) {
$imageWidth = 300;
if($imageSize[0] <= $imageWidth) {
$imageFinal = $imageSrc; // si l'mage vaut 300 on garde l'image
} else { // si elle et suprior de 300px on la redimansion
$newWidth[0] = $imageWidth; // on redimansion a 300px
$newHeight[1] = ($imageSize[1]/$imageSize[0])*$imageWidth;
$imageFinal = imagecreatetruecolor($newWidth[0],$newHeight[1]);
imagecopyresampled($imageFinal,$imageSrc,0,0,0,0,$newWidth[0],$newHeight[1],$imageSize[0],$imageSize[1]);
// on crypte le nom de l'image pour pas que y'a 2 image les même
$location = sha1(session_id().microtime());
imagejpeg($imageFinal,'image/' . $location. '.jpg'); // on enregistre limage dans le dossier
}
}
return $location;
}
return false;
}
Les 2 return à la fin interviennent dans des cas complètement diffèrent.
J'aurais pu écrire la fonction comme ceci
function upload_image($imageTmp,$image) {
if(file_exists($imageTmp)) {
//BLABLA...
return $location;
} else {
return false;
}
}
En d'autres termes, si le fichier existe je traite le fichier et je retourne son nouveau nom sinon je renvoie un booléen pour indiquer le problème
Les erreurs
C'est une notice, la plupart du temps elle n'empèche pas le script de fonctionner mais peuvent être très utiles pour débugger.
Elle indique que la variable $location qui est lue avec "return" à la ligne 56 n'est jamais définie, donc il existe un cas dans la fonction qui arrive à cette ligne 56 sans passer par la ligne " $location = sha1(session_id().microtime());" qui défini ma fonction. C'est le cas avec une image de taille infèrieure à 300.
En effet, si la condition "if($imageSize[0] <= $imageWidth) {" est remplie, il n'y aura pas de définition de la variable $location.
Il y a plusieurs façon de corriger cela. Je te propose le code en bas de ce post, si l'image est plus petite que 300 on garde les dimensions actuelles et la création de l'image est sortie de se IF. Si cela ne te convient pas, soit sur de comprendre ton code et revient avec d'autres questions plus précises.
La 2ème t'indique que $new_name est nulle (vide) ce qui est logique si on lit une variable qui n'a jamais été définie, ceci devrait être corrigé par la modification expliqué ci-dessus
la 3ème est directement lié à la 2ème.
Ce code devrait donc mieux te convenir :
J'ai également retiré le 2ème argument de ta fonction, tu ne le renseigne pas lors de l'appel à ta fonction et tu ne t'en servais jamais.
function upload_image($imageTmp) {
if(file_exists($imageTmp)) {
$imageSize = getimagesize($imageTmp); // r'envoi la taille de l'image
if($imageSize['mime'] == 'image/jpeg') {
$imageSrc = imagecreatefromjpeg($imageTmp);
} elseif($imageSize['mime'] == 'image/png') {
$imageSrc = imagecreatefrompng($imageTmp);
} else if($imageSize['mime'] == 'image/gif') {
$imageSrc = imagecreatefromgif($imageTmp);
} else { //si c'est pas une image valide
echo "Votre image n'est pas valide";
$imageSrc = FALSE;
return false;//Si il y a erreur, on l'indique au nouveau nom pour que l'enregistrement en base ne se fasse pas
}
if($imageSrc !== FALSE) {
$imageWidth = 300;
if($imageSize[0] <= $imageWidth) {
$newWidth[0] = $imageSize[0];
$newHeight[1] = $imageSize[1];
} else { // si elle et suprior de 300px on la redimansion
$newWidth[0] = $imageWidth; // on redimansion a 300px
$newHeight[1] = ($imageSize[1]/$imageSize[0])*$imageWidth;
}
$imageFinal = imagecreatetruecolor($newWidth[0],$newHeight[1]);
imagecopyresampled($imageFinal,$imageSrc,0,0,0,0,$newWidth[0],$newHeight[1],$imageSize[0],$imageSize[1]);
// on crypte le nom de l'image pour pas que y'a 2 image les même
$location = sha1(session_id().microtime());
imagejpeg($imageFinal,'image/' . $location. '.jpg'); // on enregistre limage dans le dossier
}
return $location;
}
return false;
}
J'ai commencé par refaire l’indentation de ta fonction, même si PHP n'en a pas besoin, cela aide grandement pour comprendre un code
[php]function upload_image($imageTmp,$image) {
if(file_exists($imageTmp)) {
$imageSize = getimagesize($imageTmp); // r'envoi la taille de l'image
if($imageSize['mime'] == 'image/jpeg') {
$imageSrc = imagecreatefromjpeg($imageTmp);
} elseif($imageSize['mime'] == 'image/png') {
$imageSrc = imagecreatefrompng($imageTmp);
} else if($imageSize['mime'] == 'image/gif') {
$imageSrc = imagecreatefromgif($imageTmp);
} else { //si c'est pas une image valide
echo "Votre image n'est pas valide";
$imageSrc = FALSE;
return false;//Si il y a erreur, on l'indique au nouveau nom pour que l'enregistrement en base ne se fasse pas
}
if($imageSrc !== FALSE) {
$imageWidth = 300;
if($imageSize[0] <= $imageWidth) {
$imageFinal = $imageSrc; // si l'mage vaut 300 on garde l'image
} else { // si elle et suprior de 300px on la redimansion
$newWidth[0] = $imageWidth; // on redimansion a 300px
$newHeight[1] = ($imageSize[1]/$imageSize[0])*$imageWidth;
$imageFinal = imagecreatetruecolor($newWidth[0],$newHeight[1]);
imagecopyresampled($imageFinal,$imageSrc,0,0,0,0,$newWidth[0],$newHeight[1],$imageSize[0],$imageSize[1]);
// on crypte le nom de l'image pour pas que y'a 2 image les même
$location = sha1(session_id().microtime());
imagejpeg($imageFinal,'image/' . $location. '.jpg'); // on enregistre limage dans le dossier
}
}
return $location;
}
return false;
}[/php]
Les 2 return à la fin interviennent dans des cas complètement diffèrent.
J'aurais pu écrire la fonction comme ceci
[php]function upload_image($imageTmp,$image) {
if(file_exists($imageTmp)) {
//BLABLA...
return $location;
} else {
return false;
}
}[/php]
En d'autres termes, si le fichier existe je traite le fichier et je retourne son nouveau nom sinon je renvoie un booléen pour indiquer le problème
[size=150]Les erreurs[/size]
C'est une notice, la plupart du temps elle n'empèche pas le script de fonctionner mais peuvent être très utiles pour débugger.
Elle indique que la variable $location qui est lue avec "return" à la ligne 56 n'est jamais définie, donc il existe un cas dans la fonction qui arrive à cette ligne 56 sans passer par la ligne " $location = sha1(session_id().microtime());" qui défini ma fonction. C'est le cas avec une image de taille infèrieure à 300.
En effet, si la condition "if($imageSize[0] <= $imageWidth) {" est remplie, il n'y aura pas de définition de la variable $location.
Il y a plusieurs façon de corriger cela. Je te propose le code en bas de ce post, si l'image est plus petite que 300 on garde les dimensions actuelles et la création de l'image est sortie de se IF. Si cela ne te convient pas, soit sur de comprendre ton code et revient avec d'autres questions plus précises.
La 2ème t'indique que $new_name est nulle (vide) ce qui est logique si on lit une variable qui n'a jamais été définie, ceci devrait être corrigé par la modification expliqué ci-dessus
la 3ème est directement lié à la 2ème.
Ce code devrait donc mieux te convenir :
J'ai également retiré le 2ème argument de ta fonction, tu ne le renseigne pas lors de l'appel à ta fonction et tu ne t'en servais jamais.
[php]function upload_image($imageTmp) {
if(file_exists($imageTmp)) {
$imageSize = getimagesize($imageTmp); // r'envoi la taille de l'image
if($imageSize['mime'] == 'image/jpeg') {
$imageSrc = imagecreatefromjpeg($imageTmp);
} elseif($imageSize['mime'] == 'image/png') {
$imageSrc = imagecreatefrompng($imageTmp);
} else if($imageSize['mime'] == 'image/gif') {
$imageSrc = imagecreatefromgif($imageTmp);
} else { //si c'est pas une image valide
echo "Votre image n'est pas valide";
$imageSrc = FALSE;
return false;//Si il y a erreur, on l'indique au nouveau nom pour que l'enregistrement en base ne se fasse pas
}
if($imageSrc !== FALSE) {
$imageWidth = 300;
if($imageSize[0] <= $imageWidth) {
$newWidth[0] = $imageSize[0];
$newHeight[1] = $imageSize[1];
} else { // si elle et suprior de 300px on la redimansion
$newWidth[0] = $imageWidth; // on redimansion a 300px
$newHeight[1] = ($imageSize[1]/$imageSize[0])*$imageWidth;
}
$imageFinal = imagecreatetruecolor($newWidth[0],$newHeight[1]);
imagecopyresampled($imageFinal,$imageSrc,0,0,0,0,$newWidth[0],$newHeight[1],$imageSize[0],$imageSize[1]);
// on crypte le nom de l'image pour pas que y'a 2 image les même
$location = sha1(session_id().microtime());
imagejpeg($imageFinal,'image/' . $location. '.jpg'); // on enregistre limage dans le dossier
}
return $location;
}
return false;
}[/php]