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 :

[CSV] Lecture fichier [PHP 5.0]


Sujet :

Langage PHP

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Par défaut [CSV] Lecture fichier
    Bonjour tout le monde !

    Donc voila j'explique mon problème, je suis actuellement en train de travaillé sur un programme développé en php (je le reprend pour y ajouté des fonctionnalité).
    La fonctionnalité qui me pose problème est l'ouverture d'un fichier .txt qui est en fait rangé comme un csv avec une tabulation pour séparer les champs.

    J'ai un souci au niveau de la lecture du fichier, j'ai une erreur :
    Warning: fgets(): supplied argument is not a valid stream resource in C:\wamp\www\GEAC-Test\Scripts\PHP\import_SIFFA.php on line 22

    et une autre :
    Warning: fclose(): supplied argument is not a valid stream resource in C:\wamp\www\GEAC-Test\Scripts\PHP\import_SIFFA.php on line 79

    Je me sert du formulaire suivant pour récupérer le fichier situer sur le même disque que le programme (mais pas même emplacement)
    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
    <script type="text/javascript">
     
    	function import_SIFFA(){
    		fichierSIFFA = document.getElementsByName("fichierSIFFA")[0].value;
    		document.location.replace("mod_normal.php?btn=importSIFFA&fichierSIFFA="+fichierSIFFA);
    		}
     
    </script>
     
    <table border="0" width="80%" align="center">
    		<tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr>
    		<tr>
    			<td colspan="2">
    				<center><b>Importation du fichier SIFFA dans la base de données</b></center>
    			</td>
    		</tr>
    		<tr></tr><tr></tr><tr></tr><tr></tr><tr></tr><tr></tr>
    		<tr>
    			<td colspan="2" align="center" style="border-bottom:groove"><br /><br /> Souhaitez-vous mettre à jour les catégories de tout les licenciés ?
    			</td>
    		</tr>
     
    		</tr>
    	</table>
    	</br>
     
    	<center>Fichier a envoyer : <input type="file" name="fichierSIFFA" size="30"/></center>
    	</br>
     
    	<center><input type="button" name="btnimportSIFFA" value="   Importer les données   "onclick="import_SIFFA()"/></center>
    Pour lire le fichier, je me sert du code suivant qui n'est pas fini, je préfére avancer doucement en étant sur de 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
    <?php
     
    //=========================
    // Traitement des donnees
    //=========================
     
    //recupere le nom du fichier
    $fichier=$_FILES['fichierSIFFA']['name'];
    $fichier=$_FILES['fichierSIFFA']['tmp_name'];
     
    // ouverture du fichier en lecture
    $fp = fopen("$fichier","r"); 
    $ligne = fgets($fp,350);    
    fclose($fichier);
    ?>
    Si quelqu'un pouvait m'aider assez rapidement sa serai vraiment sympa -_-
    Je bloque dessus depuis un moment est mon niveau n'est pas trop élevé ...

    PS : et si parla même occasion quelqu'un sait quel paramètre il faut mettre dans la fonction explode pour dire que le séparateur est une tabulation sa m'arrangerai aussi ...

  2. #2
    Membre éprouvé
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Par défaut
    Essaye un file_exists($fichier) pour voir.

  3. #3
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonsoir

    Je pense que ton erreur vient du fait que $fichier ne contient que le nom du fichier et non son chemin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $fichier=$_FILES['fichierSIFFA']['name'];
    $fichier=$_FILES['fichierSIFFA']['tmp_name'];
    Le fichier se trouve au même endroit que le script ?

    Au passage pourquoi utiliser deux fois $fichier vu que la seconde déclaration écrase la première ?

    La tabulation c'est \t

    Fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $vari = "ed ij ezo de 	 osd jskd kj";
     
    $varia = explode("\t", $vari);
     
    var_dump($varia);

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Par défaut
    Non malheureusement le script et le fichier ne se trouve pas au même endroit donc il faudrait que je puisse récupérer le chemin et non juste le nom.

    Pour l'exploitation du fichier en lui même je sais comment procédé, vu que je doit rentré le contenu dans une Base de données Access (pourquoi ils ont voulu sa ? -_-) je doit faire du ligne par ligne. Donc le var_dump ne m'est que moyennement utile non ?

    Donc a priori il faudrait juste que je puisse récupérer le chemin du fichier au lieu de son nom.

  5. #5
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Citation Envoyé par ApocalypseDuck Voir le message
    Non malheureusement le script et le fichier ne se trouve pas au même endroit donc il faudrait que je puisse récupérer le chemin et non juste le nom.

    Donc a priori il faudrait juste que je puisse récupérer le chemin du fichier au lieu de son nom.
    Oui c'est ça... Tu peut savoir avec la directive upload_tmp_dir quel est ce chemin...

    Citation Envoyé par ApocalypseDuck Voir le message
    Donc le var_dump ne m'est que moyennement utile non ?
    Mon code était juste un exemple pour te montrer que explode avec "\t" fonctionne...

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Par défaut
    Bon j'ai été voir ce fameux upload_tmp_dir, j'ai placé le fichier concerné dans le chemin indiqué et j'ai toujours les deux même warnings.
    J'ai essayé de faire l'explode de la première ligne et de l'afficher avec var_dump mais je n'obtiens qu'un : array(1) { [0]=> string(0) "" }

    Donc la je vois vraiment pas, on dirait que sa vient du fgets sa m'énerve.

  7. #7
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    As tu essayé file_exists conseillé par lucas74 ?

    Une question : traite tu ton fichier dans le même script que celui de l'upload ? parce que à la fin de l'exécution du script d'upload le fichier dans le répertoire temporaire est détruit : http://php.developpez.com/faq/index....ichiers_upload et http://www.php.net/manual/fr/feature...ost-method.php

    Le fichier sera automatiquement effacé du fichier temporaire à la fin du script, s'il n'a pas été déplacé ou renommé.
    D'ailleurs j'essayerais à ta place de le déplacer à un endroit "définitif" après l'upload, et de le traiter ensuite...

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Par défaut
    Voila pour l'instant ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $fichierSIF = $_GET[fichierSIFFA];
    $stock = 'C:/wamp/www/GEAC-Test/Scripts/PHP/';
     
    if (move_uploaded_file($fichierSIF, $stock.$fichierSIF))
    {
        echo "Le fichier ".$fichierSIF.
                " a été téléchargé avec succès dans ".$stock;
    }
     
    $fichier = $stock.$fichierSIF;
    //recupere le nom du fichier
    if (file_exists($fichier))
    	echo "youpi";
    La variable $fichier contient bien le chemin complet avec le nom du fichier tout sa tout sa mais aucun des deux echo ne s'affiche et le fichier ne se trouve pas à l'emplacement indiqué après l'exécution du script.

    Sa commence légèrement à m'agacer donc pour se soir je stop.

    En revanche je me demande si le fait que j'utilise du javascript pour passer le fichier et donc mon bouton est un input de type button et non un input de type submit y est pour quelque chose ... Je suis obliger d'utiliser le javascript (je pense vu que tout le reste du programme est comme sa) car sinon je perds toute l'interface lorsque le script se lance. Je précise aussi que l'architecture est en MV (pas de controleur car un seul état pour le programme).

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 21
    Par défaut
    Bon bé j'ai résolu mon problème en imposant au client un emplacement pour mettre son fichier, à partir de la je récupère bien le nom et j'indique le chemin à partir du script. Pour la suite je devrai me débrouiller, j'ai vu des post traitant de se genre de traitement si jamais je bloque.

    Merci à vous pour votre aide !

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

Discussions similaires

  1. Lecture fichier .csv par colonne
    Par BRAUKRIS dans le forum Langage
    Réponses: 3
    Dernier message: 05/10/2007, 14h08
  2. Lecture fichier CSV
    Par Iphelias dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/06/2007, 21h58
  3. [CSV] Lecture de fichier "volumineux"
    Par damaskinos dans le forum Langage
    Réponses: 8
    Dernier message: 12/06/2007, 11h22
  4. lecture fichier .csv
    Par wiss20000 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/06/2007, 20h48
  5. [CSV] lecture dans un fichier
    Par romain.barraud dans le forum Langage
    Réponses: 1
    Dernier message: 20/04/2007, 19h53

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