Rechercher : dans
Par :

Upload d'un fichier en php

Dernière réponse le 24 jan 2009 à 15:13:55 frantzy, le 16 jan 2001 à 11:11:58 
 Signaler ce message aux modérateurs

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

1

PhP, le 16 jan 2001 à 16:42:40
  • +1

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+

Répondre à PhP

2

JoNas, le 27 déc 2006 à 17:39:47

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?

Répondre à JoNas

3

kij_82, le 27 déc 2006 à 17:45:52
  • +1

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". ~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic
et ya pas de bôg môsieu ! ~

Répondre à kij_82

7

 Grune, le 24 jan 2009 à 15:13:55

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.

Répondre à Grune

4

laurent17300, le 10 aoû 2007 à 11:49:08

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?

Répondre à laurent17300

5

Xtream, le 26 aoû 2007 à 23:13:37

C'est parce que c'est le protocole HTTP qui est utilisé et non le FTP.

Voir : http://phpcodeur.net/articles/php/upload#rel4

Configuration: Windows XP
Firefox 2.0.0.6

Répondre à Xtream

6

thomasgafo, le 22 fév 2008 à 09:45:44

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.

Because HE lives... I can face tomorrow

Répondre à thomasgafo