Page 1 sur 2

Upload d'images.

Posté : 27 avr. 2006, 15:13
par Invité
Bonjour,

J'ai repris le tuto sur l'upload d'images de ce site (merci :wink: ), mais je ne comprends pas ce qui se passe, je n'ai aucune erreur d'affichée, donc tout se passe correctement, mais dans mon répertoire, l'image n'est pas enregistrée.
Je travaille en local.

Donc, j'en conclus, qu'il y a quelque chose d'autre, peut-être un truc dans le php.ini, j'ai déjà regardé les tailles max autorisées, et c'est ok de ce côté là.

Peut-il y avoir autre chose qui bloquerait le téléchargement dans la config de php ?

Car là, cela fait pas mal de temps que je cherche et je bloque complètement :/

Voici le code, mais a-priori tout est correct.

Code : Tout sélectionner

if( isset($_POST['envoi']) ) { // Vérification de l'image if( isset($_FILES['img']) ) { unset($message); $ext = array('gif', 'jpg', 'jpeg', 'png', 'GIF', 'JPG', 'JPEG', 'PNG'); $poids = 500000; $temp = '/temp/'; if( !in_array(substr(strrchr($_FILES['img']['name'], '.'), 1), $ext) ) { $message = 'Cette extension d\'image n\'est pas autorisé.'; } elseif( file_exists($_FILES['img']['tmp_name']) && filesize($_FILES['img']['tmp_name']) > $poids ) { $message = 'Votre image dépasse la taille autorisée.'; } if( !isset($message) ) { $dest = basename($_FILES['img']['name']); //echo $_FILES['img']['tmp_name'] . $temp . $dest; $dest = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $dest = preg_replace('`([^.a-z0-9]+)`i', '_', $dest); // copie du fichier $envoi = move_uploaded_file($_FILES['img']['tmp_name'], $temp . $dest); if( $envoi === false ) { echo 'Erreur ...'; } else { echo 'Réussi !!'; } } else { echo $message; } }
Si une bonne âme pouvait m'éclairer sur les diverses raisons pourquoi l'upload de l'image ne se fait pas, alors que mon code m'affiche bien Réussi après l'envoi.

Merci.

Posté : 27 avr. 2006, 15:27
par Shrell
$dest = strtr($dest_fichier, 
            'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
            'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
est-ce que ta variable $dest_fichier est définie? je ne la vois utilisée nulle part ailleurs. Je pense que ceci devrait etre mieux:
$dest = strtr($dest, 
            'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
            'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 

Posté : 27 avr. 2006, 15:38
par Invité
Ah, oui, j'avais oublié de changer le nom de la variable, mais ça ne change rien, toujours pas d'enregistrement.

Un echo de $_FILES['img']['tmp_name'] me donne C:\WINDOWS\TEMP\php14.tmp

Et un echo de $temp . $dest me donne /temp/console.png

J'ai également un problème avec ce script, c'est que lorsqu'après un premier envoi, j'actualise ma page, mon navigateur plante, c'est bizarre :cry:

Posté : 29 avr. 2006, 17:56
par Invité
Bonjour,

J'ai essayé ce script sous linux, et en ayant mis le chmod à 777, cela fonctionne bien :P

Ah oui aussi, sur linux j'obtiens :

echo de $_FILES['img']['tmp_name'] => /tmp/phpRsMSXh
echo de $temp . $dest => ./temp/console.png

Donc a-priori, rien de différent...

Personne ne voit pourquoi sous windows, mes images ne s'enregistrent pas dans mon répertoire ?

Posté : 02 mai 2006, 09:04
par henrydomis
j'ai eu un probleme d'upload, et de droits plus spécifiquement, donc pour ceux qui auront aussi un problème:

j'ai trouvé sur php.net

chmod("source_du_fichier.extension", $droit);

avec
$droit = 0777; //tous les droits, tous les utilisateurs
$droit = 0666; //ecriture, lecture , tous les utilisateurs...
...
...
il faut juste ne pas oublier le 0 devant la serie de droit.
vous pouvez utiliser les xrw+ , et je vous envoie sur php.net , recherche chmod dans les fonctions et la doc sera affichee.

Posté : 02 mai 2006, 09:35
par Erazer
si je puis me permettre :)

pour les images, c'est mieux de ne pas se baser que sur l'extension :)

si la personne change le nom (fichier.exe en fichier.jpg) elle poura l'envoyer sur ton serveur


quand tu envoies un fichier avec un formulaire, tu as la donnée suivante

$_FILE['fichier']['type'] qui correspond au type mime du fichier.

exemple:

image/jpg
image/gif
image/png
.
.
.


c'est un peu plus fiable que l'extension.

ensuite pour ce qui est du php tu as la fonction getimagesize()

qui te permet aussi de récupérer différente info afin de vérifier que ça soit vraiment une image.

Posté : 02 mai 2006, 10:27
par Ryle
Ah oui aussi, sur linux j'obtiens :

echo de $_FILES['img']['tmp_name'] => /tmp/phpRsMSXh
echo de $temp . $dest => ./temp/console.png

Donc a-priori, rien de différent...
Il y a une grosse différence pourtant, le point qui précède ton "/" initial indique que le chemin se fait par rapport au dossier en cours (./) . S'il n'y a pas de point au début (/) il se base sur la racine de ton disque ce qui n'a probablement rien à voir.
Je pense qu'il te faut donc t'assurer que le point est bien présent, ou bien tout simplement ne pas commencer le chemin par un / :)

Posté : 02 mai 2006, 13:15
par Invité
Merci :D

> henrydomis, j'ai essayé en mettant un chmod à tous mes dossiers et fichiers de façon correcte, comme tu m'as précisé, mais ça n'a rien changé.

> Erazer, j'ai pas bien compris, si j'essaies d'envoyer un *.exe avec ce script, le fichier n'est pas uploadé, j'ai essayé avec *.jpg.exe, et c'est pareil, mais je vais faire comme tu as dis, plusieurs précautions valent mieux qu'une :P

> Ryle, tu as trouvés, j'avais mis le point sur linux, car j'en ai pris l'habitude, mais sur windows, cela ne m'a jamais posé problème de ne pas le mettre.

J'ai honte :oops: , toutes les images que j'ai uploadées sont dans le répertoire TEMP de windows (j'avais oublié qu'il ne respectait pas la casse).
De plus comme le répertoire de mon site est sur une autre partition, je n'ai pas pensé qu'il aurait pu uploader sur la partoche windows.

Merci beaucoup à tous, c'est résolu :wink:

Posté : 02 mai 2006, 14:26
par Erazer
renome un fichier.exe en fichier.jpg
et refait ton test

Posté : 02 mai 2006, 18:18
par Invité
Oui, mais excuses moi de mon ignorance, mais si je transforme un *.exe ou encore un *.bat en jpg, gif ou encore png, sur ma machine, il ne s'exécute pas, normal puisqu'il est défini comme une image et non comme ce qu'il est censé être, et donc sa dangerosité est nulle, enfin à mon avis.

A moins qu'il ne change d'extension tout seul :o , mais alors là j'aurais pas tout suivi :P

Posté : 02 mai 2006, 18:49
par Erazer
je te dis ça par expérience :)

tu me dis que ça fonctionne pas sur ta machine, c'est sûr :)
quand tu remarques qu'un upload filtre sur l'extension.

tu renomes ton fichier.zip en fichier.jpg, tu l'envoies sur le serveur, tu distribues ton lien, la personne le reprend et renome enfin le fichier.jpg en fichier.zip.

cependant, tu en fais ce que tu veux, ce n'était qu'une remarque :)

Posté : 02 mai 2006, 19:20
par Invité
Oui, c'est sûr, après avoir renommé un services.bat en services.jpg, j'obtiens un "aperçu non disponible", mais en aucun le .bat que j'ai renommé ne s'exécute et ouvre le services.msc comme il le fait avec l'extension correcte.

Mais c'est certains qu'après avoir redonné l'extension correcte, il y a un risque.

De toute façon comme je suis du genre parano, je vais y mettre le maximum de vérification :D

Merci :wink:

upload pdf

Posté : 04 mai 2006, 16:01
par béka
Moi c'est pareil, en plus je suis novice, je voudrais permettre à des internautes d'uploader des fichiers au format pdf sur un serveur pour que ceux-ci soient consultables par la suite. Or je ne sais pas comment faire pour permettre l'upload. Quelqu'un peut-il m'aider.

Merci

Posté : 04 mai 2006, 16:07
par Invité
Eh bien tu rajoutes pdf aux extensions autorisées et en ajoutant une condition, si c'est un *.pdf, on autorise un poids de tant de mégaoctets.

:P

Posté : 04 mai 2006, 16:08
par Béka
j'ai juste a reprendre ton code et a rajouter pdf ?
c'est aussi simple?
bé merci alors