Content-types et upload d'image - Librairie GD [RESOLU] - PHP - Programmation
Marsh Posté le 15-01-2009 à 12:04:18
Il sert à quoi ton premier Content-Type ? Parce que là il ne sert strictement à rien, si t'affiches de l'HTML après
Marsh Posté le 15-01-2009 à 12:07:07
FlorentG a écrit : Il sert à quoi ton premier Content-Type ? Parce que là il ne sert strictement à rien, si t'affiches de l'HTML après |
Les fonctions de créations d'images via librairie GD ne sont disponibles qu'en content-type image/xxx non ?
Marsh Posté le 15-01-2009 à 12:08:39
Nan mais le content-type est destiné au navigateur. Que ce soit PHP ou GD, ils s'en foutent. Ils ne regardent même pas ce header. Ca n'intervient pas du tout dans l'exécution du script, c'est uniquement le navigateur qui l'utilise pour déterminer le type de contenu.
Marsh Posté le 15-01-2009 à 12:12:21
FlorentG a écrit : Nan mais le content-type est destiné au navigateur. Que ce soit PHP ou GD, ils s'en foutent. Ils ne regardent même pas ce header. Ca n'intervient pas du tout dans l'exécution du script, c'est uniquement le navigateur qui l'utilise pour déterminer le type de contenu. |
Comment tu peux créer une image jpeg via php sans spécifier une en-tête pendant la création de l'image en question.
Je ne suis pas sur que ca soit possible...
Marsh Posté le 15-01-2009 à 12:16:25
jocastt a écrit : Comment tu peux créer une image jpeg via php sans spécifier une en-tête pendant la création de l'image en question. |
Tu confonds tout en fait. Les fonctions GD s'en foutent de l'entête. Elles ne savent même pas qu'il existe.
L'entête est uniquement utilisé lorsque tu affiches une image, genre :
Code : |
Donc quand tu réceptionnes les données du formulaire, tu fais l'insertion en base, puis le redimensionnement + sauvegarde de l'image, et c'est tout. Mais le redimensionnement ou la sauvegarde s'opèrent sur un fichier, donc il n'y a pas de notion d'HTTP, donc pas d'entête Content-Type
Marsh Posté le 15-01-2009 à 12:26:37
FlorentG a écrit : |
Tu pourras donc aisément m'expliquer pourquoi ce code fonctionne :
Code :
|
Et pourquoi celui là ne fonctionne pas : (Division by zero in xxx.php on line 2)
Code :
|
Marsh Posté le 15-01-2009 à 12:28:22
Euh chez moi ça marche très bien, il n'y a vraiment pas besoin de header. Le problème est ailleurs.
Le header n'est pas du tout lu par PHP. Si t'en veux la preuve, je te sors le code source...
Marsh Posté le 15-01-2009 à 12:29:51
En fait c'est simple d'ailleurs, le premier ne fonctionne pas non-plus. Mais comme c'est un header différent de text/html, le navigateur n'affiche pas le texte, croyant que c'est une image.
Sniff le traffic HTTP, tu verra que le message d'erreur y est aussi
Marsh Posté le 15-01-2009 à 12:35:10
Alors je continue de fouiller sur le net en même temps,
voilà une petite page que j'ai trouvée..
En haut de chacun de leur script, j'ai l'impression de voir un header.
Par contre, je veux bien voir le code qui génère des images jpeg, sans que l'en-tête jpeg soit appelé. (si ca te dérange pas trop...)
Marsh Posté le 15-01-2009 à 12:38:11
Si eux mettent un entête en haut, c'est parce qu'ils affichent tout de suite après l'image. Sachant qu'il faut préciser le Content-Type pour que le navigateur sache comme l'afficher.
Mais nul besoin de ces entêtes pour redimensionner/sauvegarder une image Ton code :
Code :
|
Il faut juste s'assurer que $img contient le chemin vers l'image
Marsh Posté le 15-01-2009 à 12:42:15
Purée là je suis perdu, et en plus j'ai faim quoi...
$img contient bien le lien vers l'image en question. Bizarre cette division par 0.
Il faut m'aider !
Bon, j'ai horreur de faire ca... Mais peut-être l'erreur sautera aux yeux de quelqu'un.
Code :
|
désolé.
Marsh Posté le 15-01-2009 à 14:01:02
Ton code là :
Code : |
$lien doit être le fichier image, là c'est totalement autre chose. Il faut remplace par :
Code : |
Et pareil après dans l'appel à imagecreatefromjpeg.
Aussi, la validation du type d'image (basée sur l'extension) n'est pas bonne et dangereuse. N'importe qui peut renommer un fichier en .jpg. Pareil si l'image est invalide. Il faut plutôt vérifier le type retourné par getimagesize
Marsh Posté le 15-01-2009 à 14:23:11
FlorentG a écrit : Ton code là :
|
un echo de <img src=$lien /> m'affiche bien l'image uploadée.
(car je bouge le fichier temp vers le dossier de mon choix grace a move_uploaded_file)
Donc $lien contient bien le lien relatif de mon image.
Merci pour ton aide en tout cas. Je commence à perdre espoir.
Question sécurité, tu as tout à fait raison et je me pencherai sur la question dès que ce contre temps sera reglé.
Si quelqu'un voit ce qui cloche..., qu'il n'hésite pas :s
Marsh Posté le 15-01-2009 à 14:24:12
Peut-être avec un chemin absolu plutôt que relatif ? Ce n'est pas sûr que getimagesize gère tout ce qui est include path et tout.
Marsh Posté le 15-01-2009 à 14:29:27
FlorentG a écrit : Peut-être avec un chemin absolu plutôt que relatif ? Ce n'est pas sûr que getimagesize gère tout ce qui est include path et tout. |
Laisse tomber je viens de voir mon erreur. Ca devient grave... Regarde ligne 49. 2 variables qui ne sont pas déclarées . . .
Comment perdre 2 heures pour une connerie pareille
Ca me rend dingue tout ca.
En tout cas merci pour ton aide.
PS : Bizarrement ca fonctionne beaucoup mieux comme ca.
Marsh Posté le 15-01-2009 à 11:45:56
Bonjour à tous,
Décidément c' est pas ma semaine.
Voilà j'ai un p'ti soucis.
J'ai un script qui doit enregistrer des infos sur une personne dans une BDD, et dans ces infos il y a aussi une photo dans le formulaire.
(jusque là c'est pas extraordinaire)
Alors j'ai créé un petit script, pour l'upload de la photo, qui retaille la photo 2x.
Ce script stocke 1 miniature dans un dossier photo/mini.
Et il stocke l'autre dans un dossier photo/normal
Les images sont bien retaillées, et elles sont bien envoyées dans leur dossier respectif.
Sauf que :
J'ai l'impression qu'à la fin de ce script de redimensionnement, le content-type reste bloqué sur image/jpeg.
La suite du code ne s'execute pas, la page se fige sur une page blanche avec comme en-tête mapage.php (image JPEG) et affiche l'url de la page que j'ai demandée.
Structure du code :
qques lignes de mon phpinfo(); :
-PHP Version 4.3.9
-GD Support enabled
-GD Version bundled (2.0.28 compatible)
Ce script de redimensionnement, je l'ai déjà utilisé pour un autre site et il fonctionne correctement.
Si quelqu'un a déjà eu ce problème...
Ju.
Message édité par jocastt le 15-01-2009 à 14:32:39