IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Comment récupérer le chemin complet à partir d'un upload ?


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut Comment récupérer le chemin complet à partir d'un upload ?
    Bonjour à tous,

    Je suis actuellement entrain de développer un site en PHP à l'aide de la plateforme EasyPHP.

    Cela fait un moment que j'essaye de trouver une solution pour récupérer le chemin d'un fichier texte (.doc, .odt, .xls, .ppt, ...) et l'insérer dans ma base de donnée. J'aimerais grâce à ce chemin pouvoir par la suite, ouvrir le fichier en cliquant sur un lien.

    Quelqu'un aurait une idée ?

    Voici mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <form enctype="multipart/form-data" action="test2.php" method="post">
     
     
     
    	  <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
     
     
    	  Envoyez ce fichier : <input name="fichier" type="file" />
     
     
    	  <input type="submit" value="Envoyer le fichier" />

    Et voici ce que j'ai trouvé : cela récupère le chemin temporaire mais je ne sais pas si c'est un bon moyen. De plus, on ne peut télécharger que des images.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $uploaddir = './';;
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
     
    echo '<pre>';
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "Le fichier est valide, et a été téléchargé
               avec succès. Voici plus d'informations :\n";
    } else {
        echo "Attaque potentielle par téléchargement de fichiers.
              Voici plus d'informations :\n";
    }
     
    echo 'Voici quelques informations de débogage :';
    print_r($_FILES);
     
    echo '</pre>';
    Merci de votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Ton script ne se compose que de cela?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Voici mon script complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    	<form enctype="multipart/form-data" action="test2.php" method="post">
     
     
    	  <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
     
     
    	  Envoyez ce fichier : <input name="userfile" type="file" />
     
    	  <input type="submit" value="Envoyer le fichier" />
     
    	</form>
     
     
    <?php
     
     
    $uploaddir = './';;
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
     
    echo '<pre>';
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "Le fichier est valide, et a été téléchargé
               avec succès. Voici plus d'informations :\n";
    } else {
        echo "Attaque potentielle par téléchargement de fichiers.
              Voici plus d'informations :\n";
    }
     
    echo 'Voici quelques informations de débogage :';
    print_r($_FILES);
     
    echo '</pre>';
     
     
     
     
    if (isset($_FILES['userfile']))
    {
     
    	$host="localhost";
    	$user="root";
    	$password="";
    	mysql_connect($host,$user,$password);
    	mysql_select_db("orange");
     
    	$img_blob = file_get_contents ($_FILES['userfile']['tmp_name']);
    	$req = "insert into document (chemin_doc) values "."'".$img_blob."' " ;
    	$ret = mysql_query ($req) or die (mysql_error ());
    	return true;
     
    }
     
     
     
     
     
    ?>


    C'est juste ma première étape, mais je ne sais pas si je suis sur la bonne voie ... J'aimerais des conseils ou des idées.

  4. #4
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Utilise plutôt ce script (récup sur google)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    <?php
    //Ne pas oublier de remplacer fichier par le nom de ton input
    if( isset($_POST['upload']) ) // si formulaire soumis
    {
        $content_dir = 'upload/'; // dossier où sera déplacé le fichier
     
        $tmp_file = $_FILES['fichier']['tmp_name'];
     
        if( !is_uploaded_file($tmp_file) )
        {
            exit("Le fichier est introuvable");
        }
     
        // on copie le fichier dans le dossier de destination
        $name_file = $_FILES['fichier']['name'];
     
        if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
        {
            exit("Impossible de copier le fichier dans $content_dir");
        }
     
        echo "Le fichier a bien été uploadé";
    }
     
    ?>

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Merci, j'avais également trouvé ce code sur google. Je l'avais testé mais cela n'a pas marché.

    J'ai bien fait les modifications :

    - changé le nom de mon input

    Envoyez ce fichier : <input name="upload" type="file" />

    - indiqué le chemin dans lequel mon fichier sera uploadé

    $content_dir = 'D:\Sources\EasyPHP\EasyPHP5.2.10\www\fichiers';

    Si j'ai bien compris, le fichier que j'ai uploadé doit se retrouver dans le dossier 'fichier' ...

    Est ce bien le cas ?

  6. #6
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Non en fait upload c'est le nom de ton submit, le nom qu'eux ont donné c'est fichier donc voila tu peux mettre fichier à l'attribut name et en principe cela devrait fonctionner.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Citation Envoyé par yann0807 Voir le message
    Non en fait upload c'est le nom de ton submit, le nom qu'eux ont donné c'est fichier donc voila tu peux mettre fichier à l'attribut name et en principe cela devrait fonctionner.

    Oui d'accord. Mais je voulais savoir que fais exactement ce script.
    Est ce qu'il permet de récupérer le fichier voulu dans un dossier dont j'ai donné le chemin ?

    Si c'est le cas, alors j'ai un soucis, car lorsque je charge le fichier cela ne me le stocke pas dans le dossier.

  8. #8
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Oui il le fait mais je pense que dans ton cas il faut enlever la condition
    if(isset($_POST['upload'])){

    }

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Citation Envoyé par yann0807 Voir le message
    Oui il le fait mais je pense que dans ton cas il faut enlever la condition
    if(isset($_POST['upload'])){

    }
    Si je l'enlève cela me génère une erreur...

  10. #10
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Non laisse le enlever. Poste moi plutôt quelle erreur cela te génère?
    En passant, dans ton script de traitement, fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "<pre>";
    print_r($_FILES);
    echo "</pre>"

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Bonjour,

    J'ai bien inséré le petit bout de code que tu m'as passé mais il n'est pas pris en compte.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
     
     
        $content_dir = 'D:\Sources\EasyPHP\EasyPHP5.2.10\www\fichiers'; 
     
        $tmp_file = $_FILES['fichier']['tmp_name'];
     
        if( !is_uploaded_file($tmp_file) )
        {
            exit("Le fichier est introuvable");
        }
     
        $name_file = $_FILES['fichier']['name'];
     
        if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
        {
            exit("Impossible de copier le fichier dans $content_dir");
        }
     
        echo "Le fichier a bien été uploadé";
     
    	echo "<pre>";
    	print_r($_FILES);
    	echo "</pre>"
    ?>

    Et l'erreur affichée est la suivante :

    Notice: Undefined index: fichiers in D:\Sources\EasyPHP\EasyPHP5.2.10\www\test\recherche-12\test2.php on line 28
    Le fichier est introuvable


    Faut-il initialiser fichier ?

  12. #12
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Le nom de ton input est bien fichier sans S. Et dans le code tu as bien indiqué fichier sans S?

  13. #13
    Membre chevronné Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Gérant - société de développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 417
    Par défaut
    Bonjour à tous,

    Alors du peu que j'ai lu ton code de formulaire ce n'est pas
    $_FILES['fichier'] mais $_FILES['userfile'] que tu devrais utiliser.

    Ensuite les "exit" en plein milieu de script c'est violent... Tu t'es connecté à ta base de données avant ? Si oui pense à la fermer avant d'Exit en sauvage sinon en production tu pourrais rencontrer des soucis...

    Et pour finir il serait bien de contrôler le type de fichier. Car la avec ton bout de code si je veux uploader un script php ou autre j'ai le droit. Et ça devient vite le drame.

    Hésite pas à nous remettre tout ton code si tu as fait des modifications ça nous aideras à comprendre le tout et les modifications effectué

    Cordialement,

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Bonjour,

    Merci pour votre aide, j'ai réussi à uploader un fichier. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <form enctype="multipart/form-data" action="test2.php" method="post">
     
    	  <!-- MAX_FILE_SIZE doit précéder le champs input de type file -->
     
    	  <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
     
    	  <!-- Le nom de l'élément input détermine le nom dans le tableau $_FILES -->
     
    	  Envoyez ce fichier : <input name="fichier" type="file" />
     
    	  <input type="submit" value="Envoyer le fichier" />
     
    	</form>
     
     
    <?php
    include 'connexion.php';
        $content_dir = 'D:\Sources\EasyPHP\EasyPHP5.2.10\www\fichiers\.'; 
     
        $tmp_file = $_FILES['fichier']['tmp_name'];
    	$test=$_FILES['fichier']['name'];
     
        if( !is_uploaded_file($tmp_file) )
        {
            exit("Le fichier est introuvable");
        }
     
     
        $name_file = $_FILES['fichier']['name'];
     
        if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
        {
            exit("Impossible de copier le fichier dans $content_dir");
        }
     
        echo "Le fichier a bien été uploadé";
     
    	echo "<pre>";
    	print_r($_FILES);
    	echo "</pre>"
    ?>
    Maintenant que je sais comment faire, auriez vous une idée pour télécharger ce document afin de le lire, le modifier ?
    J'utilise PhpMyadmin. Je voulais grâce à l'upload, extraire le chemin pour l'enregistrer dans une base de données puis pour ensuite pouvoir l'ouvrir...
    Je ne sais pas si ça se fait ...

  15. #15
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    Une fois l'upload réalise tu enregistres le nom de ton fichier dans ta base de données grâce au nom du fichier. Genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $chemin =  'ton chemin'.$name_file
    Cette variable tu l'enregistes dans ta BDD

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Ok d'accord, merci ! J'ai inséré le chemin dans la base de données.
    Ensuite j'ai créé un lien qui va permettre d'ouvrir le document à partir du chemin.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php 
    $chemin = 'D:\Sources\EasyPHP\EasyPHP5.2.10\www\fichiers\.'.$name_file;
     mysql_query("insert into document (chemin_doc) values ('$chemin') ")  or die ('erreur requête');
    ?>
     
    <a href="'.$result['chemin_doc'].'">ouvrir</a>
    Lorsque j'appuie sur le lien, une alerte s'affiche " Firefox ne sait pas ouvrir cette adresse car le protocole (d) n'est associé à aucun programme"

    Il faudrait faire en sorte d'ouvrir ce fichier avec un programme si j'ai bien compris.

  17. #17
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    il faudrait de une voir si la variable que je t'ai indiqué contient l'extension du fichier et deux je te conseille un chemin relatif. Genre ../fichiers/tonfichier.ext et non pas un chemin absolu.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Lorsque j'ajoute le chemin dans la base de données j'ai bien l'extension.

    Voici ce qui est inséré dans ma base de données :

    "D:SourcesEasyPHPEasyPHP5.2.10wwwfichiers.historique FT.odt"

    On a bien l'extention .odt

    J'aimerais savoir si le chemin relatif influence sur l'ouverture du fichier.

  19. #19
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Par défaut
    C'est préférable crois moi de mettre un chemin relatif. Evite également les espaces blancs dans tes noms de fichiers. Ce sont toutes des petites choses qui peuvent poser problème. Remplace les espaces blancs par des _ ou des -

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 18
    Par défaut
    Bonjour,

    d'accord merci Yann0807 pour l'information

    Auriez vous une idée sur l'ouverture du fichier qui a été uploadé ?
    j'ai trouvé ceci sur internet, mais je ne sais pas si c'est un bon moyen. Pour cela je force le téléchargement voici le code que j'ai trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     //date actuelle
    $date = gmdate('D, d M Y H:i:s');
     
    header("Content-Type: text/xml"); //Ici par exemple c'est pour un fichier XML, a changer en fonction du type mime du fichier voulu.
    header('Content-Disposition: attachment; filename=NOM_FICHIER.xml');
    header('Last-Modified: '. $date . ' GMT');
    header('Expires: ' . $date);
    //header specifique IE :s parce que sinon il aime pas
    if(preg_match('/msie|(microsoft internet explorer)/i', $_SERVER['HTTP_USER_AGENT'])){
      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
      header('Pragma: public');
    }else{
      header('Pragma: no-cache');
    }
     
    echo $CONTENU_DE_NOTRE_FICHIER; // ou readfile('CHEMIN_FICHIER'); En fonction du type de fichier.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment récupérer le chemin complet SANS le nom de la page HTML ?
    Par Zebulon777 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/09/2010, 12h17
  2. Réponses: 13
    Dernier message: 10/04/2006, 18h25
  3. Réponses: 1
    Dernier message: 18/11/2005, 17h55
  4. Comment récupérer le chemin d'une table liée
    Par ptitepunk dans le forum Access
    Réponses: 2
    Dernier message: 15/09/2005, 11h47
  5. Récupérer le chemin complet de l'appli
    Par alainpeniche dans le forum Windows
    Réponses: 3
    Dernier message: 10/08/2005, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo