Dumbo Posté 2 Janvier 2007 Posté 2 Janvier 2007 (modifié) Bonjour, Voilà, je propose à mes membres d'afficher des photos sur leur espace perso. Je n'ai jamais manipulé les images, ni les fichiers. Or j'ai lu qu'il est préférable de stocker les images dans des fichiers, plutôt que dans la BD. Donc en fait, je veux faire cela : if(poids de la photo < 30ko AND taille de la photo < 130px*130px){on insère l'image dans un fichier;}else{echo 'la photo doit faire moins de 30ko et 130px de coté';} Mais je suis bloqué dès la première condition, pour le controle du poids (je n'ai donc même pas essayé la suite). Je pensais y arriver avec fgets, mais ça ne m'avance pas et si je fais rien que ça : $taille = fgets($_POST['photo']);echo"$taille" J'obtiens : Warning: fgets(): supplied argument is not a valid stream resource in /home/site/page.php on line 660 Et ça m'affiche non pas la taille, mais le nom de l'image, genre image.gif. Donc voilà, j'ai tout avoué, si vous pouvez m'aider à réaliser ça, ça serait super sympa. Merci d'avance. Modifié 2 Janvier 2007 par Dumbo
destroyedlolo Posté 2 Janvier 2007 Posté 2 Janvier 2007 Bon, pas trop le temp mais : filesize() te revera la taille du fichier Pour la taille de l'image, il faut que tu regarde dans l'extention GD qui contient tout ce qu'il faut pour gerer une image. A+ Lolo
captain_torche Posté 3 Janvier 2007 Posté 3 Janvier 2007 Et sinon, les éléments uploadés sont accessibles via la variable $_FILES, et non $_POST. Il faudra que ton formulaire soit de la forme : <form method="post" action="ta_page.php" enctype="multipart/form-data">
Dumbo Posté 5 Janvier 2007 Auteur Posté 5 Janvier 2007 Salut captain_torche, Alors déjà, j'essaie d'afficher le poids de l'image, je fais ça : Sur la page avec le bouton parcourir : <form method="post" action="creation-site.php" enctype="multipart/form-data"><input type="file" name="photo" value="parcourir"></form> Ca c'est sur la page de réception, j'essaie juste d'afficher le poids : $photo=filesize($_FILES['photo']);echo ''.$photo.''; Et j'obtiens sur cette même page : Warning: filesize() [function.filesize]: Stat failed for Array (errno=2 - No such file or directory) in
Remi Posté 5 Janvier 2007 Posté 5 Janvier 2007 $_FILES['photo']['size'] (mais c'est la taille du transfert... Avant de faire un filesize() sur le fichier, il faut que tu renommes ton fichier) Pour limiter la taille transmise, au lieu de contrôler après coup, utilise MAX_FILE_SIZE !
Dumbo Posté 6 Janvier 2007 Auteur Posté 6 Janvier 2007 (modifié) $_FILES['photo']['size'](mais c'est la taille du transfert... Avant de faire un filesize() sur le fichier, il faut que tu renommes ton fichier) Pour limiter la taille transmise, au lieu de contrôler après coup, utilise MAX_FILE_SIZE ! Bon alors je comprend rien. J'ai fais ça : $photo=filesize($_FILES['photo']);echo ''.$photo.''; J'obtiens une erreur et on me dit que c'est parce que $_FILE['photo'] est un tableau. Super, je vois pas pourquoi mais bon, je veux bien croire tout ce que l'on me dit si ça fonctionne. Mais ça fonctionne pas... Donc , en clair, si je veux afficher seulement le poids de l'image et faire un test sur celui-ci , je fais quoi ? Quelles sont les étapes, s'il vous plait ? Modifié 6 Janvier 2007 par Dumbo
lepidosteus Posté 7 Janvier 2007 Posté 7 Janvier 2007 http://fr3.php.net/manual/fr/features.file-upload.php Lire la doc avant tout
Théo B. Posté 7 Janvier 2007 Posté 7 Janvier 2007 (modifié) Il faut déjà que tu la télécharge temporairement pour controler son poids non ? Modifié 7 Janvier 2007 par Théo B.
Dumbo Posté 7 Janvier 2007 Auteur Posté 7 Janvier 2007 http://fr3.php.net/manual/fr/features.file-upload.php Lire la doc avant tout smile.gif Bonne initiative, j'y vais de suite Il faut déjà que tu la télécharge temporairement pour controler son poids non ? euh... comment ça ? déjà je la télécharge pas, je l'upload, il me semble. Ensuite je dois afficher son poids avant de l'insérer dans le fichier (du moins là c'est ce que je veux faire, pour commencer).
Dumbo Posté 7 Janvier 2007 Auteur Posté 7 Janvier 2007 Bon alors, j'ai lu la doc. 1) Voilà ce que j'ai fait pour obtenir le poids : Page d'envoi : <form method="post" action="creation-site.php" enctype="multipart/form-data"><input type="hidden" name="MAX_FILE_SIZE" value="15000" /><input type="file" name="photo" value="parcourir"><input type="submit" name="pro-gratuit-8" value="envoyer"></form> Alors j'ai utilisé le champ hidden avec le nom MAX_FILE_SIZE pour avoir un poids maxi, comme j'ai pu le lire. Après sur la page de réception, je fais ça : if(is_uploaded_file($_FILES['photo']['tmp_name'])){ echo $_FILES['photo']['size'];} Alors là pour tout dire, j'ai récupéré le code sur le net. Donc is_uploaded_file, je ne sais pas trop à quoi ça sert. ['tmp_name'] a à priori c'est un attribu qui récupère le poids. Et pour l'afficher on écrit $_FILES['photo']['size'] (et pourquoi pas $_FILES['photo']['tmp_name'] Bon donc j'arrive à afficher le poids, j'ai donc fait un pas mais franchement c'est gadouilleux. Aussi, si le fichier uploadé à des espace dans son nom, par exemple "mon image.jpg", alors ça n'affiche pas le poids. Mais je pense que je peux changer le nom de fichier en lui attribuant par exemple la valeur de l'id du membre qui uploade. 2) Pour récupérer la taille, j'ai trouvé ça : if($img = imagecreatefromgif($uploadfile)) { if((ImageSX($img) == 16) && (ImageSY($img) == 12)) { $texte .= '<center><h3>Votre nouveau tag <img src="'.$uploadfile.'" border="0"> à bien été enregistrée !</h3><br><br><a href="./index.php">Retour a l\'accueil</a></center>'; } else { $texte .= '<center>Votre image ne respecte pas les dimensions ! Pour rappel, c\'est 16 pixels en largeur pour 12 en hauteur.<br><br><a href="./up_tag.php">Recommencer</a></center>'; unlink($uploadfile); } Mais alors là, je ne vois pas pourquoi on fait imagecreateformgif($uploadfile) et ensuite, je pense que ImageSX et ImageSY sont fonction permettant d'obtenir la dimension (donc mon cas, faire <130 au lieu de ==16, puisque je veux que l'image fasse au maximum 130 pixel de coté. Donc si quelqu'un peut me dire si j'ai pas fait d'erreur pour le poids et s'il peut m'expliquer comment faire pour comprendre et adapter la deuxième partie à mon cas, restera plus sans doute qu'à expédier l'image dans le fichier. Petit à petit l'oiseau fait son nid...
Dumbo Posté 8 Janvier 2007 Auteur Posté 8 Janvier 2007 Bon je continue de lutter, j'ai essayé ça : $chemin = 'http://www.site.com/visu/membres/';if (move_uploaded_file($_FILES['photo']['tmp_name'], $chemin.$_FILES['photo']['name'])){ echo "Le fichier ".$_FILES['photo']['name']. " a été téléchargé avec succès dans ".$chemin;} Et ça m'affiche : Warning: move_uploaded_file(http://www.site.com/visu/membres/image.jpg) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections. in /home/site/scripts/compte/minisite/form-pro-gratuit.php on line 662Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpgDQvud' to 'http://www.site.com/visu/membres/image.jpg' in /home/site/scripts/compte/minisite/form-pro-gratuit.php on line 662 Sachant que le script se situe dans le répertoires scripts/compte/minisite, à l'extérieur du dossier WWW. Alors que le répertoire visu/membres, celui des images, se situe à l'intérieur du dossier WWW. Donc déjà, avant de (re)voir la suite, quelqu'un peut-il m'expliquer cette erreur ?
Dumbo Posté 8 Janvier 2007 Auteur Posté 8 Janvier 2007 Bon alors j'ai mis un chemin relatif et c'est bon, ce petit script fonctionne et j'ai regardé dans le ftp de dreamweaver, l'image est arrivée dans le bon dossier. Il me reste à : - changer le nom de l'image pour lui attribuer par exemple le nom image_id_du_membre.jpg. - controler que l'image est jpg, gif, ou un png, ou si c'est possible tout bascule en jpg par exemple. - controler le poids et la taille. Et quand tout ça est fait, alors seulement j'expédie l'image comme je viens de le faire. Déjà pour changer le nom de l'image, je vois pas, puisque pour le peu que j'ai compris, je dois travailler avec le nom temporaire. Je suis pas sorti de l'auberge.
Dumbo Posté 12 Janvier 2007 Auteur Posté 12 Janvier 2007 Taratata, me revoilà eh eh ! Alors j'ai presque réussi. (je sais c'est fastoche, mais bon) //on test si il y a le fichier photoif(is_uploaded_file($_FILES['photo']['tmp_name'])) { //on test le poids if( filesize($_FILES['photo']['tmp_name']) <= 30000 ) {//si le poids est inférieur à 30ko, on test les dimensions et le type du fichier$chemin = 'visu/membres/';$chemin2=$chemin.$_FILES['photo']['name'];list($width, $height, $type, $attr) =getimagesize($_FILES['photo']['name']);echo" $width - $height - $type <p> ";$datas=getimagesize($_FILES['photo']['name']);echo $datas['mime']; //on va tester les dimensions et le format du fichier if($width<130 AND $height<130 AND ($type=="image.gif" OR $type=="image.jpg")) { //on passe le fichier du répertoire temporaire au répertoire définitif if (move_uploaded_file($_FILES['photo']['tmp_name'], $chemin.$_FILES['photo']['name'])) { echo "Le fichier ".$_FILES['photo']['name']. " a été téléchargé avec succès dans ".$chemin; echo'<p>' ;}//ferme if move_uploaded_file ;}//ferme le test des dimensions et du format else { //si dimension ou format mauvais echo'dimension ou format mauvais' ;} ;}//ferme le test du poids else { //si poids >30KO, message d'erreur echo'fichier trop gros' ;}}//ferme le test si le fichier est présent Bon le problème, c'est que ça m'affiche ça : Warning: getimagesize(bonne-taille-gif.gif) [function.getimagesize]: failed to open stream: No such file or directory in /home/site/www/photo-test.php on line 148- -Warning: getimagesize(bonne-taille-gif.gif) [function.getimagesize]: failed to open stream: No such file or directory in /home/site/www/photo-test.php on line 151dimension ou format mauvais Par contre avec ce code, je n'ai pas d'erreur à l'affichage. Mais il n'est pas valable car la condition sur les dimensions et le type mime n'est pas prévue, seul l'affiche est effectué : if(is_uploaded_file($_FILES['photo']['tmp_name'])) { //on test le poids if( filesize($_FILES['photo']['tmp_name']) <= 30000 ) { //si le poids est inférieur à 30ko, on l'insère $chemin = 'visu/membres/'; if (move_uploaded_file($_FILES['photo']['tmp_name'], $chemin.$_FILES['photo']['name'])) { echo "Le fichier ".$_FILES['photo']['name']. " a été téléchargé avec succès dans ".$chemin; echo'<p>';list($width, $height, $type, $attr) =getimagesize("visu/membres/barre-test.gif");echo" $width - $height - $type -$attr <p> ";$chemin2=$chemin.$_FILES['photo']['name'];$datas =getimagesize("$chemin2");echo $datas[mime]; } }//ferme le test du poids else { //si poids >30KO, message d'erreur echo'fichier trop gros' ;}}//ferme le test si le fichier est présent
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant