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
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
A voir également:

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
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+
1
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
Voilà pour ce qui est de la page upload.php a appeler :
<?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".
1
Je passais dans le coin, à la recherche d'une solution simple pour envoyer des photos sur un FTP via un admin de site, et c'est pile poil ce dont j'avais besoin. Donc je voulais juste dire merci :)

Grune.
0
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?
0
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
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?
0

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
0
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
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.
0