Fonction upload php - PHP - Programmation
Marsh Posté le 28-12-2007 à 09:53:05
Normalement le fichier est renommé en un nom unique temporaire, ça ne devrait jamais écraser quelque chose d'existant... Imagine les problèmes de sécurités. Si un fichier est écrasé, c'est qu'il y a un problème ailleurs
Marsh Posté le 28-12-2007 à 11:39:38
De toute facon c'est le serveur Web qui appele nomme les fichiers temporaires. Tu n'as de toute facon pas à t'en soucier puisque tu n'intervient à aucun moment.
Marsh Posté le 28-12-2007 à 23:40:52
Rebonjour,
Ben je ne comprends pas, lorsque j'upload un fichier avec mon script il s'upload à la racine de mon site avec le nom d'origine du fichier et ce quelques soient les contrôles sur le fichier que je peux réaliser. Ainsi, si un fichier de même nom existe déjà il est écrasé. La seule solution que j'ai trouvé c'est de mettre toutes mes pages et images dans des dossiers et non à la racine du site, comme ça je suis sur qu'ils ne seront pas écrasés sauf pour la page index pour laquelle le problème persiste!!
Je vous mets mon script. Il s'agit d'un script pour que les gens du forum se créeent un avatar :
*****************************
Voici le formulaire :
Code :
|
*****************************
Après envoi du formulaire on revient à la même page avec la variable $auth = 1 donc on exécute le script suivant :
Code :
|
Qu'en pensez vous ? En gros tous les contrôles sur l'existence d'un fichier de même nom, l'extension du fichier etc ne servent à rien car le fichier est déjà uploadé à la racine. Ils ne permettent que de déplacer ou non le fichier uploadé dans le répertoire de stockage des avatars.
Comment puis-je faire ?
Merci beaucoup !
Romain
Marsh Posté le 29-12-2007 à 12:33:43
Déjà utilises les balises CPP sinon tu vas te faire taper sur les doigts par un Modo
D'autre part il semblerai que tu utilises les variables globales avec cd code, c'est pas franchement recomandé car ca ne sera pas franchement portable...
Et pour infos, un upload correct se fait de la facon suivante :
Formulaire HTML :
Code :
|
Et le traitement associé :
Code :
|
Marsh Posté le 29-12-2007 à 12:42:08
the_bigboo a écrit : Déjà utilises les balises CPP sinon tu vas te faire taper sur les doigts par un Modo
|
Pardon d'avoir oublié les balises cpp.
Je ne sais pas bien ce que sont des variables globales avec cd code. Qu'est ce que c'est ? Qu'est ce que tu entends par "ce n'est pas portable" ?
Les pages de mon site sont en php3, c'est pour cela que je n'utilise pas les variables que tu utilises toi qui sont du php4, non ?
Sinon dans mon code, y a t il un problème qui fait que le fichier s'upload à la racine du site quels que soient les test que j'effectue ?
Merci
Romain
Marsh Posté le 29-12-2007 à 14:18:15
une variable global c'est par exemple d'utiliser directement :
Code :
|
pour une données située dans l'url du type http://www.monsite.com/?variable=4 au lieu de faire :
Code :
|
Ce que je veux dire par pas portable :voila un url de test :
Code : |
Avec les register_globals activées :
Code :
|
Acev les register_globals désactivées
Code :
|
Seules les fonctions diffèrent entre les différentes versions de PHP ainsi que quelques notations. Parler de variable PHP3 ou PHP4 ne veut absolument rien dire ! Mets donc ton code proprement dans des balises CPP mais complet car a la vue de ce que tu montres il y a plein de déclaration de variables manquantes..
Marsh Posté le 29-12-2007 à 14:37:35
Clapsou a écrit : RAprès envoi du formulaire on revient à la même page avec la variable $auth = 1 donc on exécute le script suivant :
|
Evite à tout prix ce genre de trucs. Les redirections, ça se fait côté serveur via les entêtes HTTP. Mais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais jamais avec un bout de script louche comme ça
Marsh Posté le 29-12-2007 à 15:58:14
De plus je vois pas l'intéret de file_exists si dans ce cas la c'est plus is_file qui devrait etre employé
Marsh Posté le 29-12-2007 à 17:28:06
the_bigboo a écrit : une variable global c'est par exemple d'utiliser directement :
pour une données située dans l'url du type http://www.monsite.com/?variable=4 au lieu de faire :
|
Ok je comprends! Je pensais que cette nouvelle déclaration de variable correspondait à l'évolution de php 3 vers php4 c'est pour ça que je parlais de "variables php 3 ou php4".
Pour l'instant tout marche en appelant directement les variables par $. register_globals doit être toujours activées pour le moment chez multimania, free et autres hébergeurs gratuits. Quelqu'un sait-il si ils pensent bientôt désactiver register_globals ? car ça me demanderait pas mal de travail de traduire toutes les pages de mon site en déclarant ainsi les variables avec $_GET, $_POST, etc
En plus je ne sais pas comment du coup déclarer les variables utilisées "ponctuellement", pour une boucle par exemple (genre for($i=0;...) comment déclarer $i ?), puisqu'elle sont créées "pour l'occasion" et ne proviennent ni d'un formulaire ni d'un url etc
Merci
Marsh Posté le 29-12-2007 à 20:14:47
qd tu écrit for ($i =0 ...
la varible est créé/declarée/initialisée automatiquement
Marsh Posté le 30-12-2007 à 00:29:06
Ce n'est pas une question de parametre activé ou non.
Ton application a BESOIN que l'option soit activée pour fonctionner.
Une application portable est par définition une application qui fonctionne quelle que soit la configuration et ne dépends ( ou au minimum ) d'aucun parametre d'environnement.
Imagine que bientot multimania arrete l'hébergement et que tu doive mettre ton application aiileurs ? Sache par ailleurs que la configuration par défaut de PHP5 ( qui sera devenu standard d'ici le 31 ) a par défaut les globales de désactivées !
Marsh Posté le 31-12-2007 à 11:45:54
T'es sur que multimania est en php3? Quand j'avais mon site dessus en 2000 ils en étaient déjà au php4 et maintenant on peut lire sur leur page d'accueil : "Créez votre propre site internet en quelques clics. Multimania est entièrement gratuit! Désormais avec 1024 Mo de stockage et PHP5."
Par contre il est fort possible qu'ils aient gardé le "register_global" à on pour éviter que la majorité des sites ne tombent en panne à cause de l'utilisation de "variable globale" au lieux des variables $_* ($_POST, $_GET, $_SERVER, etc). Ca n'est que retarder l'inévitable, il faudra bien qu'ils installe tôt ou tard un php6 ou supérieur et là ce paramètre n'existera plus et donc il n'y aura plus de création automatique des variables globales à partir du contenu des variables $_* .
Marsh Posté le 31-12-2007 à 17:13:19
Bonjour,
Bon je viens de revoir tous mes scripts pour modifier mes variables globales et les déclarer correctement. Du coup mon script pour l'upload me fait un truc bizarre.
Le fichier s'upload bien, il est bien déplacé dans le répertoire voulu, par contre lorsque je souhaite l'utiliser dans mon site (ce sont des images avatars pour le forum), et bien l'image ne s'affiche pas. En fait le fichier a des permissions restrictives : lorsque l'on clique droit sur l'image et que l'on fait afficher l'image on nous dit que l'on a pas la permission de voir ce fichier et quand je regarde sur mon ftp le fichier n'a effectivement pas les permissions de lecture pour le public. C'est très bizarre.
Quelqu'un a déjà eu ce problème ??
Merci d'avance!
Marsh Posté le 01-01-2008 à 20:00:26
omega2 a écrit : T'es sur que multimania est en php3? Quand j'avais mon site dessus en 2000 ils en étaient déjà au php4 et maintenant on peut lire sur leur page d'accueil : "Créez votre propre site internet en quelques clics. Multimania est entièrement gratuit! Désormais avec 1024 Mo de stockage et PHP5." |
Oui en fait c'est ce que je voulais dire. Ils offrent le choix entre php 4 ou 5 . Par contre le register global est pour l'instant toujours à "on" comme sur beaucoup d'hébergeur mutualisé. Jusqu'à quand, ça je ne sais pas. Mais bon, à la suite de tous vos conseils j'ai modifié mes scripts en déclarant mes variables globales avec $_POST, $_GET, etc. Mieux vaut prévenir que guérir en effet..
Marsh Posté le 01-01-2008 à 20:06:02
Pour infos, mon pb de permissions limitées des fichiers uplaodés est réglé. En fait lorsque je travaillais en variables globales du style $monfichier_name, j'utilisais la fonction rename pour déplacer mes fichiers vers un répertoire définitif. Il semblerait donc que le problème vienne de l'utilisation de cette fonction rename avec des variables déclarées par $_FILES* puisqu'en utilisant la fonction move_uploaded_files tout marche tres bien.
Bizarre quand même..
Marsh Posté le 01-01-2008 à 23:19:56
Comme je te l'ai montré je crois, c'est move_uploaded_file qu'il faut utiliser
Marsh Posté le 27-12-2007 à 21:45:24
Bonjour,
J'utilise la fonction upload de php sur mon site afin de permettre aux visiteurs de créer leur avatar pour mon forum. Après l'upload une série de tests vérifient l'extension du fichier et déplace le fichier vers un répertoire définitif en le renommant avec l'identifiant unique du visiteur. Le problème c'est que l'espace d'upload temporaire dans lequel le fichier est d'abord uploadé avant déplacement semble être la racine de mon ftp (je suis hébergé chez multimania). Du coup, si un fichier de même nom se trouvait déjà sur le ftp (par exemple une page, une image de mon site), le fichier uploadé le remplace.
Je ne sais pas comment faire car tous les tests possibles ne peuvent se faire qu'après l'upload du fichier dans l'espace temporaire!
Merci de m'aider si quelqu'un à une solution!
Romain