Sauvegarder une image sur le serveur

Eléphant du PHP | 170 Messages

13 avr. 2007, 06:48

Bonjour a tous,
pour la réalisation de mon site j'ai besoin de telecharger une image a partir d'un formulaire, je la redimensionne si besoin mais je n'arrive pas à créer une sauvegarde de la photo telechargée et redimensionnée sur le serveur.
Quelle fonction dois je utiliser?
Avez vous des exemples?
Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 avr. 2007, 10:22

Il te faut utiliser la fonction move_uploaded_file() pour copier l'image dans un de tes répertoires, une fois que ton image a été uploadé sur le serveur dans le dossier temporaire. La redimension ne devrait se faire qu'ensuite selon moi :)

Pour les exemples, suffit de chercher un peu sur le forum, y en a tout plein ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 170 Messages

14 avr. 2007, 07:49

Mais peut on redimensionner automatiquement l'image pendant l'operation de l'upload avant quelle ne soit suavgardée dans le repertoire de destination?

Mammouth du PHP | 991 Messages

14 avr. 2007, 08:30

tu peut l'uploadé dans un dossier temporaire puis lui faire les traitement demande (sauveagrde dimensionnement etc ) puis la deplacer ^^
DevOps, Symfony4, Hoa

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 avr. 2007, 08:59

En fait, quand tu proposes un formulaire contenant un champ input type="file" à un utilisateur, qu'il le rempli et qu'il soumet le formulaire, le fichier est uploadé dans un dossier temporaire.
Tant que cet upload n'est pas terminé, tu n'as pas la main sur le fichier.

Si tu désires redimensionner ton image avant de la transférer, tu peux le faire sur l'image temporaire $_FILES['TMP_NAME'] plutôt que sur la définitive ... sauf que, selon moi, c'est du pareil au même que si tu le faisait sur l'image finale ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 170 Messages

14 avr. 2007, 11:26

Bon alors la j'y comprends rien, voici mon script: quelqu'un peut il me dire pourquoi le redimensionnement ne fonctionne pas avec toutes les images...moi je sais plus....
$nouveaunom = 'image1'; //la variable qui contient le nouveau nom du fichier telechargé
$ext = '.gif';
$dossier = 'image/';
$source = 'image/image1.gif';
$percent = 2;

// Content type
header('Content-type: image/gif');

// Calcul des nouvelles dimensions
list($width, $height) = getimagesize($source);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Redimensionnement
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromgif($source);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Affichage
imagegif($image_p, $dossier . $nouveaunom.$ext);
?> 


Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 avr. 2007, 12:52

Bon alors la j'y comprends rien, voici mon script: quelqu'un peut il me dire pourquoi le redimensionnement ne fonctionne pas avec toutes les images...moi je sais plus....
Mais encore ? Ce script ne gère que les fichier de type gif, c'est donc normal qu'il "ne fonctionne pas avec toutes les images" :)

Avec quels fichiers as-tu des problèmes ? Quels sont les résultats ? Qu'est ce qui devrait se passer selon toi ? Y a-t-il des messages d'erreur ? ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 170 Messages

15 avr. 2007, 07:40

voici les messages d'erreurs:
Warning: imagecreatefromgif(): 'C:\PROGRA~1\EASYPH~1\\tmp\php5.tmp' is not a valid GIF file in c:\program files\easyphp1-8\www\upload_redim.php on line 16

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in c:\program files\easyphp1-8\www\upload_redim.php on line 17
Upload effectué avec succès !
tout cela pourrait il venir du fait que je renomme l'image uploader en image1.gif quelque soit l'extension d'origine?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 avr. 2007, 12:28

tout cela pourrait il venir du fait que je renomme l'image uploader en image1.gif quelque soit l'extension d'origine?
Pas vraiment au fait que tu la renommes, mais plus au fait que tu la considères toujours comme du gif quel que soit le type d'origine :)

L'extension d'un fichier n'a pour intérêt que de permettre au système de savoir avec quel logiciel il doit ouvrir le fichier (si tu renommes un .gif en .doc, cela reste une image, mais il va tenter de l'ouvrir avec word.. et générer une erreur).
Le véritable type du fichier, que l'on appelle type "MIME" (généralement de la forme "image/jpeg"), est décrit par les toutes premières lignes qui codent celui-ci. C'est ce type qui permet au logiciel qui a ouvert le fichier de savoir comment il doit interpréter son contenu : un gif n'est pas écrit ni compressé de la même manière qu'un jpeg ou qu'un png.

Si tu demandes à php de prendre une image jpeg et de la lire comme un gif, il appliquera ses algorithmes pour la décoder et ne comprendra pas pourquoi rien ne correspon aux résultats attendus. Du coup il manifeste son mécontentement en te disant que le fichier que tu lui demandes d'ouvrir comme un gif n'en est pas un : is not a valid GIF file

Les image/jpeg s'ouvrent avec imageCreateFromJpeg(), les image/gif avec imageCreateGromGIF(), les bmp et les png avec d'autres fonctions encore. Il te faut donc connaitre le type de fichier, et en fonction l'ouvrir convenablement, afin de le redimensionner.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 170 Messages

15 avr. 2007, 19:27

merci pour ta reponse, je me douté un peu du probleme mais bon....
donc je vais revoir mon script pour l'adapter ou jpeg et au gif.
Pour info, mon script ne fonctionnait pas avec certain jpeg et fonctionnait avec d'autre. Alors je suppose que l'extension avait deja été changé avant.
En tout cas j'essai ça et te tiens au courant
merci