Problème d'enregistrement d'image avec move_uploaded_file

fudu
Invité n'ayant pas de compte PHPfrance

07 nov. 2014, 14:18

Bonjour !

Je travaille actuellement sur un site et j'ai développé une partie admin qui permet, entre autres, d'uploader des images qui s'afficheront sur le site.

En gros ça se passe comme ça : Formulaire de choix des images contenu sur son ordinateur => enregistrement de l'image avec move_uploaded_file => réécriture de l'image avec un filigrane (je passe par une page php annexe qui génère une nouvelle image par fusion/merge) en utilisant file_get_contents et file_put_contents.

Le problème : si je m'en tiens à la phase d'enregistrement, tout se passe bien. Cependant il semblerait que l'image s'enregistre sur le serveur sous une forme bizarre, et la réécriture ne fonctionne pas. La page me permettant de fusionner l'image et le filigrane, qui fonctionne très bien avec n'importe quelle image (jpeg ou png), ne fonctionne pas avec les images qui viennent d'être enregistré avec move_uploaded_file... Elle retourne une image "cassée", impossible à afficher.

J'ai essayé tout ce que je pouvais au niveau du code (passer par les fonctions fopen, etc.., passer par du cURL, ...) rien n'y fait. J'ai essayé de modifier le chmod d'une image, ça ne fonctionnait pas non plus. J'ai rajouter des lignes et des lignes dans mon .htaccess pour autoriser les réécritures, rien.

Je ne m'y connait pas vraiment en format d'image, etc... j'ai vu passer le terme "bitmap" sur deux trois topics assez similaire au mien, peut-être est-ce une piste.

Je précise que mon hébergeur est Hostinger.

Je ne sais pas si j'ai été suffisamment clair, n'hésitez pas à demander des précisions.

Je vous remercie d'avance,

Flavien.

Nestecha
Invité n'ayant pas de compte PHPfrance

08 nov. 2014, 04:12

Tu peux poster le code de tes pages ? Ca aiderait beaucoup, parce que tu dis que l'enregistrement se passe bien, mais que l'image s'enregistre sous une forme "bizarre". Pas facile de t'aider dans ces circonstances !

ViPHP
xTG
ViPHP | 7331 Messages

08 nov. 2014, 14:19

As-tu essayé d'afficher l'image juste après le move_uploaded_file ?

Eléphanteau du PHP | 22 Messages

10 nov. 2014, 16:27

Exemple de code qui fonctionne :
if (!move_uploaded_file($temp_doc, $destfile.$nouveau_nom)) {
$resultat="L'enregistrement a échoué, veuillez renouveller votre transfert";
} else {
//creation image avec logo vip
$img_in = imagecreatefromjpeg($destfile.$nouveau_nom);
//redimensionnement du logo
$ratio=100/500;
$hauteur_voulue=$hauteur*0.25;
$largeur_voulue=$hauteur_voulue*$ratio;
$lelogo=imagecreatetruecolor($largeur_voulue,$hauteur_voulue);
imagecopyresized($lelogo,$logovip,0,0,0,0,$largeur_voulue,$hauteur_voulue,100,500);
imagecopymerge($img_in, $lelogo, $largeur-$largeur_voulue, $hauteur - $hauteur_voulue, 0, 0, $largeur_voulue,$hauteur_voulue,100);
imagejpeg($img_in,$destfile . "vip/" .$nouveau_nom);
//recupere l'image pour creer une image reduite
$img_tumb=imagecreatefromjpeg($destfile . "vip/" .$nouveau_nom);
$diff=$largeur/$hauteur;
$largeurthumb=112;
$hauteurtumb=112/$diff;
$img_out=imagecreatetruecolor(112,$hauteurtumb);
imagecopyresized($img_out,$img_tumb,0,0,0,0,$largeurthumb,$hauteurtumb,$largeur,$hauteur);
imagejpeg($img_out,$destfile . "vip/thumb_" .$nouveau_nom);
}