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

PHP & Base de données Discussion :

Récupérer le contenu des fichiers d'un dossier


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Par défaut Récupérer le contenu des fichiers d'un dossier
    Bonjour à tous !

    Etant étudiante en BTS SIO, je suis actuellement en stage. Le projet que je dois mettre en place est de créer un site web avec des graphiques montrant la consommation des imprimantes d'un lycée, graphiques qui doivent être créer à partir de fichiers textes récupérés grâce à un script python. Ce dernier étant déjà fait, je n'ai pas à m'en occuper, j'ai déjà mes fichiers.

    Pour le moment, j'essaie de récupérer le contenu des fichiers, pour ensuite les intégrer à ma base de données.
    J'ai réussi à écrire un script php permettant d'ouvrir le dossier contenant tous mes fichiers. J'ai ensuite créé un autre script permettant de lire le contenu d'UN fichier de ce dossier. Maintenant, il faudrait que j'arrive à combiner les deux pour ouvrir tous les fichiers du dossier. Je me doute qu'il me faut faire une boucle pour cela, mais je n'arrive pas à comprendre pourquoi le script que j'ai ne fonctionne pas.

    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
    <?php
     
    function parcourir_repertoire($repertoire)
    {
    	$le_repertoire = opendir($repertoire) or die("Erreur le repertoire $repertoire n'existe pas");
    	while($fichier = @readdir($le_repertoire))
    	{
    		if ($fichier == "." || $fichier == "..") continue;
    		if (is_dir($repertoire. '/'.$fichier))
    		{
    			print '<ul>'.$repertoire.'/'.$fichier;
    			parcourir_repertoire($repertoire.'/'.$fichier);
    			print '</ul>';
    		}
    		else
    		{
    			print "$fichier \n";
    			$myfile = file($fichier, "r");
    			echo fread($myfile, filesize($fichier));
    		}
    	}
    }
     
    parcourir_repertoire('/mon/dossier');
     
     
    ?>
    Je vais être franche, ce n'est pas moi qui l'ai écrit entièrement, j'ai cherché un peu d'aide sur internet.
    J'ai donc rajouté dans mon "else" la fonction permettant d'ouvrir les fichiers. Sachant que cela fonctionne très bien si je mets un fichier donné à la place de ma variable. Mais avec la variable, ça me retourne des erreurs...
    Auriez-vous une idée de comment faire ?

    Merci par avance !
    Ju'.

    P.S : Je ne suis pas très douée en php malheureusement...

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Quelles erreurs obtiens-tu ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Par défaut
    Bonjour,

    J'ai finalement réussi en modifiant mon else :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else
    {
    	print "$fichier \n";
    	$myfile = file_get_contents($fichier, "r");
    	echo $myfile;
    }
    Toutefois, le script ne fonctionne que s'il se trouve dans le même dossier que les fichiers. Et je ne comprends pas pourquoi... Une idée ?
    L'erreur est la suivante : PHP Warning: file_get_contents(nom_du_fichier.csv): failes to open stream: No such file or directory in /autre_dossier/ on line 18

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as oublié de mettre le repertoire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Par défaut
    Bah, je l'ai mis à la fin quand j'appelle la fonction !

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as beau mettre des points d'exclamation, regarde ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $myfile = file_get_contents($fichier, "r");
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Par défaut [Résolu] Problème de syntaxe ? Et de fonction.
    Bonjour,

    Je souhaite entrer dans ma base de données multiples chaînes de caractères qui se trouvent dans plusieurs fichiers. Ma base de données se compose de plusieurs tables, mais les deux qui m'intéressent sont la table imprimantes (id_imprimante, nom_imprimante, adresse_ip, ...) et ma table compteur (id_compteur, id_imprimante, date_releve et compteur). Un script python récupère ainsi les compteurs de toutes les imprimantes, en rajoutant une entrée chaque jour.
    En récupérant le nom des fichiers, qui correspondent à des IP, je fais le lien entre la table compteur et la table imprimante. Puis l'objectif est d'entrer toutes ces chaînes de caractères dans la base de données.

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
     
    function parcourir_repertoire($repertoire)
    {
    	$le_repertoire = opendir($repertoire) or die("Erreur le repertoire $repertoire n'existe pas");
    	while($fichier = @readdir($le_repertoire))
    	{
    		if ($fichier == "." || $fichier == "..") continue;
    		if (is_dir($repertoire. '/'.$fichier))
    		{
    			print '<ul>'.$repertoire.'/'.$fichier;
    			parcourir_repertoire($repertoire.'/'.$fichier);
    			print '</ul>';
    		}
    		else
    		{
    			//print "$fichier \n";
    			$myfile = file_get_contents($repertoire. '/' .$fichier, "r");
    			//echo $myfile;
    		}
    	}
    }
     
    mysql_connect('localhost', 'root', 'a');
    mysql_select_db('imprimantes_test');
     
    mysql_query("TRUNCATE TABLE compteurs");
     
    	// Créé une liste des fichiers du dossier Historique (avec des indices)
    	$dossier = '/script_python/historique';	
    	$liste = scandir($dossier);
     
    	// Parcourt tous les fichiers
    	for ($seg = 2; $seg < count($liste); $seg++)
    	{
    		// Affiche seulement le nom des fichiers
    		$ip = substr($liste[$seg], 0, -4);
    		$cmd = "SELECT id_imprimante FROM imprimantes WHERE adresse_ip='$ip'";
    		//echo $cmd;
    		$impr = mysql_query($cmd);
    		$row = mysql_fetch_array($impr);
    		$result = $row['id_imprimante'];
    		//print "L'identifiant de $ip est $result \n";
    	}
     
    // On parcourt tous les fichiers
    foreach($liste as $unfichier)
    {
    	//echo $unfichier;
    	while ($data = fgetcsv($unfichier, 1000, ";"))
    	{
    		parcourir_repertoire('/script_python/historique');
    		//$data correspond à une ligne complète, nous n'avons plus qu'à la couper pour tout récupérer
    		$explode = explode(' ', $data[0]);
     
    		// On l'insert dans la base
    		mysql_query("INSERT INTO compteurs (id_compteur, id_imprimante, date_releve, compteur) 
    				VALUES ('', '.$result.', '$data[0]', '$data[1]');") or die(mysql_error());
    	}
    }
     
    // On ferme le fichier
    //fclose($fichier);
     
    ?>
    Ce qui est en commentaire est soit des commentaires soit des essais que je garde en réserve.
    Les différentes parties fonctionnent très bien lorsqu'elles sont séparées les unes des autres. Toutefois, ensemble, cela me retourne une erreur en boucle, qui est la suivante :
    PHP Warning: fgetcsv() expects parameter 1 to be resource, string given in /var/www/test_id.php on line 50

    Et je n'arrive pas à comprendre pourquoi, j'ai beau chercher et retourner le problème dans tous les sens, je ne vois pas d'où vient le problème (quelque chose me dit pourtant que c'est un truc tout bête...).

    De plus, je ne sais pas exactement à quel endroit je dois faire appel à ma fonction parcourir_repertoire, ni comment je dois fermer les fichiers qu'elle ouvre.

    Merci d'avance pour votre aide !
    Ju'

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il suffit de jetter un coup d'oeil à la doc : fgetcsv() s'utilise en couple avec fopen().

    Par contre ta fontion parcourir_repertoire ici ne sert à rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Par défaut
    D'accord, mais du coup, comment je fais pour ouvrir tous les fichiers d'un seul coup ? C'était ma fonction qui faisait cela...

    Et lorsque j'avais fais le script pour entrer les données d'un seul fichier, cela fonctionnait parfaitement :

    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
    <?php
     
    mysql_connect('localhost', 'root', 'a');
    mysql_select_db('imprimantes_test');
     
    mysql_query("TRUNCATE TABLE compteurs");
     
    // On parcourt le fichier (en lecture seule)
    $fichier = fopen("/var/www/dossier_test/172.17.212.108.csv", "r");
     
    // Récupération de l'identifiant de l'imprimante
    $impr = mysql_query("SELECT id_imprimante FROM imprimantes WHERE adresse_ip='172.17.212.108'");
    $row = mysql_fetch_array($impr);
    $result = $row['id_imprimante'];
     
    // On parcourt tout le fichier
    while ($data = fgetcsv($fichier, 1000, ";"))
    {
    	//$data correspond à une ligne complète, nous n'avons plus qu'à la couper pour tout récupérer
    	$explode = explode(' ', $data[0]);
     
    	// On l'insert dans la base
    	mysql_query("INSERT INTO compteurs (id_compteur, id_imprimante, date_releve, compteur) 
    			VALUES ('', '.$result.', '$data[0]', '$data[1]');") or die(mysql_error());
    }
     
    // On ferme le fichier
    fclose($fichier);
     
    ?>
    Il est vrai que j'ai utilisé fopen dans ce script, mais dans celui que je veux faire, je ne vois pas comment ouvrir les 45 fichiers du dossier...

    Merci de m'aider

  10. #10
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Par défaut
    J'ai rajouté un if entre mon foreach et mon while :

    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
    <?php
    // On parcourt tous les fichiers
    foreach($liste as $unfichier)
    {
    	if (($handle = fopen($unfichier, "r")) !== FALSE)
    	{
    		//echo $unfichier;
    		while ($data = fgetcsv($handle, 1000, ";"))
    		{
    			//$data correspond à une ligne complète, nous n'avons plus qu'à la couper pour tout récupérer
    			$explode = explode(' ', $data[0]);
     
    			// On l'insert dans la base
    			mysql_query("INSERT INTO compteurs (id_compteur, id_imprimante, date_releve, compteur) 
    					VALUES ('', '.$result.', '$data[0]', '$data[1]');") or die(mysql_error());
    		}
    	}
    }
     
    ?>
    Et il me renvoie ceci :
    PHP Warning: fopen(172.17.105.224.csv): failed to open stream: No such file or directory in /var/www/test_id.php on line 49

    En boucle avec tous les fichiers.
    La ligne 49 correspond à la ligne du if.
    Je pense que c'est encore un truc tout bête

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    comment je fais pour ouvrir tous les fichiers d'un seul coup ?
    Quelle drôle d'idée de vouloir tous les ouvrir d'un coup.
    Ouvre, traite et ferme.

    Pour fopen(), tu as encore oublié le repertoire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2010, 11h12
  2. récupérer la liste des fichiers d'un dossier dans un fichier texte
    Par mathieu_r dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 26/04/2009, 19h47
  3. Récupérer la liste des fichiers d'un dossier donné
    Par Narann dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 16/02/2009, 18h13
  4. Réponses: 1
    Dernier message: 05/02/2009, 10h41
  5. Récupérer les paths des fichiers d'un dossier
    Par damdam44 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 03/06/2008, 16h07

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