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 :

Lecture d'un fichier dans php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant coût global
    Inscrit en
    Juillet 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant coût global
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 108
    Par défaut Lecture d'un fichier dans php
    Bonjour,

    Je développe une application en local avant de la placer sur mon site.
    Je transmets un fichier données (.csv) dans une application PHP à partir du formulaire ci-dessous.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="POST" action="upload3.php" enctype="multipart/form-data" target="_blank">
    	Entrer le nom du fichier : <input type="file" name="avatar"> 
    	<input type="hidden" name="MAX_FILE_SIZE" value="5000"><br>
    	<input type="submit" name="envoyer" value="Envoyer le fichier"><br>
    </form>

    La transmission s'effectue correctement car j’obtiens les impressions suivantes dans le programmes PHP :
    Nom du fichier : tablo.csv
    Taille : 90
    Type : application/vnd.ms-excel
    Adresse : C:\wamp64\tmp\php8CC3.tmp
    Code erreur : 0
    Extension bien correcte
    Puis j'imprime correctement les 6 lignes du fichier.

    J'arrive à lire les enregistrements du fichier lorsque j'utilise l'instruction suivante, après avoir fixé à 6 (dans le code php) la variable $nbRisq qui définit le nombre de lignes du tableau.
    while ($i <= $nbRisq) { // tant que la fin n'est pas trouvée.

    Or, dans l'application définitive, je ne connais pas le nombre de lignes. J'ai donc remplacé cette instruction par la suivante :
    Ligne 63 while (!feof($fich_lecTablo)) { // tant que la fin n'est pas trouvée.

    Après les impressions mentionnées ci-dessus, la copie des 6 lignes du fichier est remplacée par les messages suivants :

    Fatal error: Uncaught TypeError: feof(): Argument #1 ($stream) must be of type resource, string given in C:\wamp64\www\somRisq\upload3.php on line 63
    TypeError: feof(): Argument #1 ($stream) must be of type resource, string given in C:\wamp64\www\somRisq\upload3.php on line 63
    Merci à celles ou ceux qui pourront m'aider à réparer le problème.

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    pour qu'on y voit plus clair, merci de donner le code de upload3.php.

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant coût global
    Inscrit en
    Juillet 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant coût global
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 108
    Par défaut
    Voici le code de upload3.php

    Code html : 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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    <!DOCTYPE HTML>
    <html>
    <head>
    	<title>Somme de variables indépendantes</title>
    	<meta charset="utf-8" />
    	<script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script>
    	<style type="text/css">
                    body {font: 12px sans-serif;}
    <!--            .axis path,
                    .axis line {fill: none; stroke: black; shape-rendering: crispEdges;}
                    .axis text {font-family: sans-serif; font-size: 12px;}
                    /*      .x.axis path {display: none;}  pas de tracer de l'axe mais les graduations */
                    .line {fill: none; stroke: steelblue; stroke-width: 1.5px; }
                    .line2 {fill: none; stroke: steelblue; stroke-width: 0.5px; }   -->
            </style>
     
    </head>
    <body>
    <h3>Somme des risques par simulation de Monte-Carlo </h3>
     
    <?php
    $R = array(); $R[] = array();
    $i = 1; $k = 1;
    $nbRisq = 0;
     
    // L'upload
    $dossier = 'upload/';
     
    //$fich_lecTablo = basename($_FILES['avatar']['name']);
    $fich_lecTablo = $_FILES['avatar']['name'];     //Le nom original du fichier sur le disque du visiteur
    echo "Nom du fichier : ",$fich_lecTablo,"<br/>";
     
    //$taille = filesize($_FILES['avatar']['tmp_name']);
    $taille = $_FILES['avatar']['size'];    //La taille du fichier en octets.
    echo "Taille : ",$taille,"<br/>";
     
    $tipe = $_FILES['avatar']['type'];      //Le type du fichier. Par exemple, cela peut être « image/png ».
    echo "Type : ",$tipe,"<br/>";
     
    $adress = $_FILES['avatar']['tmp_name']; //L'adresse vers le fichier uploadé dans le répertoire temporaire.
    echo "Adresse : ",$adress,"<br/>";
     
    $coderr = $_FILES['avatar']['error']; //Le code d'erreur, qui permet de savoir si le fichier a bien été uploadé.
    echo "Code erreur : ",$coderr,"<br/>";
     
    //Début des vérifications de sécurité...
    $extensions_valides = '.csv';   //      array('.csv');
    $extension_upload = strrchr($_FILES['avatar']['name'], '.');    //1. strrchr renvoie l'extension avec le point 
    if($extension_upload == $extensions_valides) {echo "Extension bien correcte <br/><br/>";} 
            else {echo "Vous devez uploader un fichier de type csv";}
    $taille_maxi = 100000;
    if($taille > $taille_maxi)      { 
            echo 'Le fichier est trop gros.';
            exit;   }
            
    //Lecture du fichier
     
    $ligne = 1; // compteur de ligne
            
    $fich = fopen($fich_lecTablo, "r");     //créer un descripteur de fichier, a+ ou r = ?reading / fclose pour fermer
            if ($fich) {   // si le fichier a bien été ouvert
    //              while ($i <= $nbRisq)  {  // tant que la fin n'est pas trouvée
                    while (!feof($fich_lecTablo))  {  // tant que la fin n'est pas trouvée
                            $ligne = fgetcsv($fich);        //lecture d'une ligne du fichier
            //          echo $ligne[0],"<br/>";     // 1er champ de la ligne
                            $lignetab = explode(";", $ligne[0]);
            //                      echo '<pre>'; print_r($lignetab);
       // echo $lignetab[0],"    ",$lignetab[1],"    ",$lignetab[2],"    ",$lignetab[3],"    ",$lignetab[4],"<br/>";
                                    $R[$i][1] = (float)$lignetab[0];
                                    $R[$i][2] = $lignetab[1];
                                    $R[$i][3] = (float)$lignetab[2];
                                    $R[$i][4] = (float)$lignetab[3];
                                    $R[$i][5] = (float)$lignetab[4];
                                    echo 'Risque ',$i,'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][1],'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][2],'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][3],'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][4],'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][5],'<br/>'; 
    //                      }
                            $i = $i + 1;
                            $nbRisq = $nbRisq + 1;
                    }
            }       
    echo "nbRisq : ",$nbRisq,"<br/>";
     
    ?>
    </body>
    </html>

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    while (!feof($fich_lecTablo))  {
    vous devriez indiquer $fich dans le cas présent.

    Je n'ai pas testé et je ne sais pas si tout le reste est OK. Mais ça devrait résoudre cette erreur qui est assez explicite.
    Je pense que la convention de nommage devrait être améliorée. Manifestement cela a causé une confusion chez vous.

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Tu n'utilises pas move_uploaded_file() dans ton script, donc en l'état tu ne risques pas de trouver ton fichier uploadé sous son nom. Pour l'instant il est sur le serveur sous son nom temporaire.
    Autre chose, vérifier l'extension '.csv' ne garantit absolument pas qu'il s'agit d'un fichier csv.

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant coût global
    Inscrit en
    Juillet 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant coût global
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 108
    Par défaut
    Bonjour,

    Code html : 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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <!DOCTYPE HTML>
    <html>
    <head>
    	<title>Somme de variables indépendantes</title>
    	<meta charset="utf-8" />
    	<script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script>
    	<style type="text/css">
                    body {font: 12px sans-serif;}
    <!--            .axis path,
                    .axis line {fill: none; stroke: black; shape-rendering: crispEdges;}
                    .axis text {font-family: sans-serif; font-size: 12px;}
                    /*      .x.axis path {display: none;}  pas de tracer de l'axe mais les graduations */
                    .line {fill: none; stroke: steelblue; stroke-width: 1.5px; }
                    .line2 {fill: none; stroke: steelblue; stroke-width: 0.5px; }   -->
            </style>
     
    </head>
    <body>
    <h3>Somme des risques par simulation de Monte-Carlo </h3>
     
    <?php
    $R = array(); $R[] = array();
    $i = 1; $k = 1;
    $nbRisq = 0;
     
    // L'upload
    $dossier = 'upload/';
     
    //$fich_lecTablo = basename($_FILES['avatar']['name']);
    $fich_lecTablo = $_FILES['avatar']['name'];     //Le nom original du fichier sur le disque du visiteur
    echo "Nom du fichier : ",$fich_lecTablo,"<br/>";
     
    //$taille = filesize($_FILES['avatar']['tmp_name']);
    $taille = $_FILES['avatar']['size'];    //La taille du fichier en octets.
    echo "Taille : ",$taille,"<br/>";
     
    $tipe = $_FILES['avatar']['type'];      //Le type du fichier. Par exemple, cela peut être « image/png ».
    echo "Type : ",$tipe,"<br/>";
     
    $adress = $_FILES['avatar']['tmp_name']; //L'adresse vers le fichier uploadé dans le répertoire temporaire.
    echo "Adresse : ",$adress,"<br/>";
     
    $coderr = $_FILES['avatar']['error']; //Le code d'erreur, qui permet de savoir si le fichier a bien été uploadé.
    echo "Code erreur : ",$coderr,"<br/>";
     
    move_uploaded_file($adress, "$fich_lecTablo");
     
    //Début des vérifications de sécurité...
    $extensions_valides = '.csv';   //      array('.csv');
    $extension_upload = strrchr($_FILES['avatar']['name'], '.');    //1. strrchr renvoie l'extension avec le point 
    if($extension_upload == $extensions_valides) {echo "Extension bien correcte <br/><br/>";} 
            else {echo "Vous devez uploader un fichier de type csv";}
    $taille_maxi = 100000;
    if($taille > $taille_maxi)      { 
            echo 'Le fichier est trop gros.';
            exit;   }
            
    //Lecture du fichier
     
    $ligne = 1; // compteur de ligne
            
    $fich = fopen($fich_lecTablo, "r");     //créer un descripteur de fichier, a+ ou r = ?reading / fclose pour fermer
            if ($fich) {   // si le fichier a bien été ouvert
    //              while ($i <= $nbRisq)  {  // tant que la fin n'est pas trouvée
                    while (!feof($fich))  {  // tant que la fin n'est pas trouvée
                            $ligne = fgetcsv($fich);        //lecture d'une ligne du fichier
            //          echo $ligne[0],"<br/>";     // 1er champ de la ligne
                            $lignetab = explode(";", $ligne[0]);
            //                      echo '<pre>'; print_r($lignetab);
       // echo $lignetab[0],"    ",$lignetab[1],"    ",$lignetab[2],"    ",$lignetab[3],"    ",$lignetab[4],"<br/>";
                                    $R[$i][1] = (float)$lignetab[0];
                                    $R[$i][2] = $lignetab[1];
                                    $R[$i][3] = (float)$lignetab[2];
                                    $R[$i][4] = (float)$lignetab[3];
                                    $R[$i][5] = (float)$lignetab[4];
                                    echo 'Risque ',$i,'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][1],'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][2],'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][3],'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][4],'&nbsp&nbsp&nbsp&nbsp';
                                    echo $R[$i][5],'<br/>'; 
    //                      }
                            $i = $i + 1;
                            $nbRisq = $nbRisq + 1;
                    }
            }       
    echo "nbRisq : ",$nbRisq,"<br/>";
     
    ?>
    </body>
    </html>

    Merci pour vos remarques.

    J'ai remplacé $fich_lecTablo par $fich dans while (!feof($fich)) et ça marche…..enfin presque!
    Les impressions que j'obtiens avec echo correspondent bien au données attendues.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Ligne 30 / Nom du fichier : tablo.csv
    Ligne 35 / Taille : 90
    Ligne 38 / Type : application/vnd.ms-excel
    Ligne 41 / Adresse : C:\wamp64\tmp\php206B.tmp
    Ligne 43 / Code erreur : 0
    Ligne 51 / Extension bien correcte
    L'impression des 6 lignes du tableau de données (lignes 76 à 81) est correct.

    Cependant, j'obtient 5 Warnings que je n'avais pas en utilisant la boucle : while ($i <= $nbRisq) pour laquelle il fallait entrer la valeur de $nbRisq dans le code.
    Warning: Trying to access array offset on value of type bool in C:\wamp64\www\somRisq\upload3.php on line 68
    Warning: Undefined array key 1 in C:\wamp64\www\somRisq\upload3.php on line 72
    Warning: Undefined array key 2 in C:\wamp64\www\somRisq\upload3.php on line 73
    Warning: Undefined array key 3 in C:\wamp64\www\somRisq\upload3.php on line 74
    Warning: Undefined array key 4 in C:\wamp64\www\somRisq\upload3.php on line 75
    De plus il m'affiche à la fin (après les warnings) une 7ème ligne qui n'existe pas. Il a donc bouclé 1 ligne de plus
    J'ai ajouté move_uploaded_file($adress, "$fich_lecTablo"); mais ça ne change rien.

    Comment peut-on vérifier qu'il s'agit bien d'un fichier csv ?

    J'ai l'impression que j'approche de la solution, mais il je n'y suis pas encore.

    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] fichiers dans PHP
    Par cat_war dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/05/2009, 18h59
  2. Lecture/Ecriture sur fichier dans Netbeans
    Par NizarK dans le forum NetBeans
    Réponses: 15
    Dernier message: 12/12/2008, 10h33
  3. Lecture d'un fichier dans un archive '.zip'
    Par Ja_buzz dans le forum Langage
    Réponses: 2
    Dernier message: 04/11/2006, 16h14
  4. méthode de lecture d'un fichier dans un buffer
    Par Mestoph dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/02/2006, 10h07
  5. [C#] [WinForms] Lecture d'un fichier dans une archive ZIP
    Par aegypius dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/12/2004, 17h15

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