Upload d'un fichier en php
frantzy
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Grune -
Grune -
bonjour,
je cherche une fonction en php (3 ou 4 mais de preference 4..) pour que l'internaute puisse uploader un fichier depuis son pc sur mon serveur ( avec si possible restriction selon la taille, le type de fichier etc...) il faudrait que l'utlisateur puisse browser son pc ...le chemin est entré dans la base et le fichier est enregistré sur mon serveur ...
en esperant avoir été assez explicite ...
merci à tous de votre aide et longue vie à ccm...
A+
Frantzy
www.apash.net
je cherche une fonction en php (3 ou 4 mais de preference 4..) pour que l'internaute puisse uploader un fichier depuis son pc sur mon serveur ( avec si possible restriction selon la taille, le type de fichier etc...) il faudrait que l'utlisateur puisse browser son pc ...le chemin est entré dans la base et le fichier est enregistré sur mon serveur ...
en esperant avoir été assez explicite ...
merci à tous de votre aide et longue vie à ccm...
A+
Frantzy
www.apash.net
A voir également:
- Upload d'un fichier en php
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
6 réponses
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+
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?
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
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.