Upload d'un fichier en php
Fermé
frantzy
Messages postés
1
Date d'inscription
mardi 10 octobre 2000
Statut
Membre
Dernière intervention
16 janvier 2001
-
16 janv. 2001 à 11:11
Grune - 24 janv. 2009 à 15:13
Grune - 24 janv. 2009 à 15:13
A voir également:
- Upload d'un fichier en php
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir un fichier .bin - Guide
- Fichier host - Guide
6 réponses
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
16 janv. 2001 à 16:42
16 janv. 2001 à 16:42
Slt frantzy
Alors voilà pour la théorie :
Dans ta page HTML du ajoute un formulaire comme suit :
<form name="sendfile" method="POST" ENCTYPE="multipart/form-data" action="upload.php3">
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
<p>Fichier à envoyer :
<input type="file" name="userfile" size="20">
</p>
<input type="submit" value="Envoyer" name="send">
</form>
Ce formulaire demande à l'utilisateur d'entrer le nom du fichier
et en prime il affiche le bouton [Parcourir ...] : tout ça grâce au
champ imput de type="file" car c'est fait pour.
Ensuite il y un champ caché appelé "MAX_FILE_SIZE" et avec pour
valeur "3000000" : ceci va empêcher l'upload des fichiers dont la taille est supérieure à 300 000 octets ! Sympa non ?
Pour le reste c'est un formulaire tout ce qu'il y a de + normal qui lorsqu'on le soumet (bouton de type submit) exécute l'action définie : ici "upload.php3"
La page uplaod.php3 (c'est là où ça se gâte ! ) :
Voici une page qui affiche grosso-modo ce que le serveur reçoît :
</head>
<p>
userfile=<?php echo $userfile; ?><br>
dirname()=<?php echo dirname($userfile); ?><br>
userfile_name=<?php echo $userfile_name; ?><br>
userfile_size=<?php echo $userfile_size; ?><br>
userfile_type=<?php echo $userfile_type; ?><br>
nouveau nom =<?php echo "/".$userfile_name; ?></p>
<?php
if (copy($userfile,$userfile_name))
{
echo "<p>Le fichier a été copier avec succès !"</p>;
}
else
{
echo "<p>Erreur lors de la copie !</p>";
}
?>
</body>
</html>
Petite explication : le fichier reçu ne porte pas le même nom que
le fichier fichier envoyé (il porte un nom temporaire attribué par le serveur) et en + est stocké dans un répertoire temporaire définit au niveau du serveur Apache (du - je crois).
Le problème c'est que ce fichier est effacé à le fin du script php donc ici à la fin de la page uplaod.php3 ! C'est pas cool du tout mais je suppose que c'est par mesure des sécurités.
J'essaie donc de le recopier ailleurs si possible et sous son nom d'origine. Mais là je me suis heurté à des problèmes de droits d'écriture et de privilèges à cause du serveur Linux de mon provider ... Donc je n'ai jamais pu aller jusqu'au bout !
Evidemment si c'est toi qui administre le serveur tu ne devrais pas rencontrer ce genre de problème .:-) ...
A+
Alors voilà pour la théorie :
Dans ta page HTML du ajoute un formulaire comme suit :
<form name="sendfile" method="POST" ENCTYPE="multipart/form-data" action="upload.php3">
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
<p>Fichier à envoyer :
<input type="file" name="userfile" size="20">
</p>
<input type="submit" value="Envoyer" name="send">
</form>
Ce formulaire demande à l'utilisateur d'entrer le nom du fichier
et en prime il affiche le bouton [Parcourir ...] : tout ça grâce au
champ imput de type="file" car c'est fait pour.
Ensuite il y un champ caché appelé "MAX_FILE_SIZE" et avec pour
valeur "3000000" : ceci va empêcher l'upload des fichiers dont la taille est supérieure à 300 000 octets ! Sympa non ?
Pour le reste c'est un formulaire tout ce qu'il y a de + normal qui lorsqu'on le soumet (bouton de type submit) exécute l'action définie : ici "upload.php3"
La page uplaod.php3 (c'est là où ça se gâte ! ) :
Voici une page qui affiche grosso-modo ce que le serveur reçoît :
</head>
<p>
userfile=<?php echo $userfile; ?><br>
dirname()=<?php echo dirname($userfile); ?><br>
userfile_name=<?php echo $userfile_name; ?><br>
userfile_size=<?php echo $userfile_size; ?><br>
userfile_type=<?php echo $userfile_type; ?><br>
nouveau nom =<?php echo "/".$userfile_name; ?></p>
<?php
if (copy($userfile,$userfile_name))
{
echo "<p>Le fichier a été copier avec succès !"</p>;
}
else
{
echo "<p>Erreur lors de la copie !</p>";
}
?>
</body>
</html>
Petite explication : le fichier reçu ne porte pas le même nom que
le fichier fichier envoyé (il porte un nom temporaire attribué par le serveur) et en + est stocké dans un répertoire temporaire définit au niveau du serveur Apache (du - je crois).
Le problème c'est que ce fichier est effacé à le fin du script php donc ici à la fin de la page uplaod.php3 ! C'est pas cool du tout mais je suppose que c'est par mesure des sécurités.
J'essaie donc de le recopier ailleurs si possible et sous son nom d'origine. Mais là je me suis heurté à des problèmes de droits d'écriture et de privilèges à cause du serveur Linux de mon provider ... Donc je n'ai jamais pu aller jusqu'au bout !
Evidemment si c'est toi qui administre le serveur tu ne devrais pas rencontrer ce genre de problème .:-) ...
A+
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
27 déc. 2006 à 17:45
27 déc. 2006 à 17:45
Voilà pour ce qui est de la page upload.php a appeler :
Il faut bien que tu vérifie le nom de ton champ de type file dans ton formulaire d'envoi, ici il doit s'appeler "mon_fichier".
<?php $repertoireDestination = "repertoirebidon/"; $nomDestination = $_FILES["monfichier"]["name"]; // Pour raison de sécurité nous ajouterons aux fichiers // portant une extension .php .php3, l'extension .txt if (eregi(".php", $nomDestination)) { $nomDestination .= ".txt"; } if (is_uploaded_file($_FILES["monfichier"]["tmp_name"])) { if (rename($_FILES["monfichier"]["tmp_name"], $repertoireDestination.$nomDestination)) { echo "Le fichier temporaire ".$_FILES["monfichier"]["tmp_name"]. " a été déplacé vers ".$repertoireDestination.$nomDestination; } else { echo "Le déplacement du fichier temporaire a échoué". " vérifiez l'existence du répertoire ".$repertoireDestination; } } else { echo "Le fichier n'a pas été uploadé (trop gros ?)"; } ?>
Il faut bien que tu vérifie le nom de ton champ de type file dans ton formulaire d'envoi, ici il doit s'appeler "mon_fichier".
Bonjour,
La fonction "copy" que vous utilisez ligne 2 de votre script php n'est valable que si le serveur tourne sous Windows, donc quel est l'équivalent de votre script sous Unix?
La fonction "copy" que vous utilisez ligne 2 de votre script php n'est valable que si le serveur tourne sous Windows, donc quel est l'équivalent de votre script sous Unix?
laurent17300
Messages postés
2
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
10 août 2007
1
10 août 2007 à 11:49
10 août 2007 à 11:49
salut les gars, je reste perplexe sur vos codes...
En effet pour un download en ftp, j'ai besoin de nomer mon serveur, mon login et mon password.
Hors ici je ne vois rien qui correspond. Comme votre serveur peut accepter le upload?
En effet pour un download en ftp, j'ai besoin de nomer mon serveur, mon login et mon password.
Hors ici je ne vois rien qui correspond. Comme votre serveur peut accepter le upload?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
C'est parce que c'est le protocole HTTP qui est utilisé et non le FTP.
Voir : http://phpcodeur.net/articles/php/upload#rel4
Voir : http://phpcodeur.net/articles/php/upload#rel4
thomasgafo
Messages postés
5
Date d'inscription
dimanche 1 juillet 2001
Statut
Membre
Dernière intervention
22 février 2008
5
22 févr. 2008 à 09:45
22 févr. 2008 à 09:45
Bonjour,
J'ai un formulaire avec champ de fichier que je souhaiterais utilisé pour enregistré des photos dans ma base de donnée. Quand j'upload tout se déroule très bien, je remarque que le fichier se transfert effectivement dans le dossier de destination mais la base (phpmyadmin) n'enregistre rien dans ma table. Qu'est ce qui peut être à la base de ceci? merci de m'aider.
J'ai un formulaire avec champ de fichier que je souhaiterais utilisé pour enregistré des photos dans ma base de donnée. Quand j'upload tout se déroule très bien, je remarque que le fichier se transfert effectivement dans le dossier de destination mais la base (phpmyadmin) n'enregistre rien dans ma table. Qu'est ce qui peut être à la base de ceci? merci de m'aider.