Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1592 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Parser un fichier.txt en PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Parser un fichier.txt en PHP

n°2248228
naniccino
Posté le 13-01-2015 à 10:38:42  profilanswer
 

Bonjour,
 
Je suis novice en php et j'aurais besoin de votre aide :)  
Alors le problème est le suivant je possède un fichier .txt qui est structurer de cette façon:
 
ip : 91.121.58.96 91.121.153.42 91.121.153.42 (Le nombre d'IP n'a pas de limite et peut être plus grand)
user : USER
password : PWD
src_path : /var/www/
dst_path : /tmp/data/
packet_size : 30000
 
j'aimerais crée un formulaire pour qu'un utilisateur puisse modifier n'importe quelle données par exmple une des trois adresse ip présente, la taille des paquets, ou tous simplement le chemin /www/.
j'arrive a ouvrir mon fichier en php le parcourir l'afficher mais je bloque sur la modification des données.

mood
Publicité
Posté le 13-01-2015 à 10:38:42  profilanswer
 

n°2248236
rufo
Pas me confondre avec Lycos!
Posté le 13-01-2015 à 11:15:44  profilanswer
 

Ca serait sans doute plus facile à modifier tes données si elles étaient dans une BD. Car modifier un fichier txt avec pas mal de données, ça risque d'être un peu compliqué et pourri en terme de perfs. Si ton fichier fait moins d'1 Mo, tu peux le charger dans une variable de type tableau associatif, via un parsing. Tu fais tes modifs dans la variable direct via une IHM puis tu régénères le fichier à la fin. Si le fichier est plus conséquent, t'auras plutôt intérêt à le charger dans une BD, faire les modifs via une IHM puis regénérer le fichier à partir de la BD à la fin.
 
La limite du "1 Mo" est donnée "à la louche". Des tests permettront de voir à partir de quelle taille ça commence à ramer ;)
 
Edit : pour le parsing : tu charges ligne après ligne et tu utilises des regexp pour "découper" les données et les avoir de manière atomique. En fonction de la ligne lue précédemment et connaissance le format de ficheir, tu vas en déduire la regexp à utiliser pour la ligne suivante.


Message édité par rufo le 13-01-2015 à 11:17:15

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2248238
naniccino
Posté le 13-01-2015 à 11:22:52  profilanswer
 

j'ai penser a la BD mais les fichiers n'arriverons pas a 1mo c'est pour cela que une BD est inutile.
Je te remercie pour ces informations mais comme je l'ai indiquer je suis vraiment un novice lol donc si ca ne te dérange pas de m'expliquer ceci avec des mots plus simple ca serais vraiment sympas :)

n°2248240
mechkurt
Posté le 13-01-2015 à 11:39:10  profilanswer
 

Regarde du coté de la fonction : parse_in_file, dans les commentaires il'y a je crois une fonctions récrire le fichier.
 
Le reste n'est plu que de l'affichage / traitement d'un formulaire.


---------------
D3
n°2248242
naniccino
Posté le 13-01-2015 à 11:56:55  profilanswer
 

j'ai pas trouver le commentaire dont tu me parle comme je l'ai dit la lecture l'affichage et meme l'écriture dans un fichier je peut le faire mon seul souci est de savoir comment je doit faire pour par exemple modifier la 5eme adresse IP ou juste le size du packet.
J'ouvre mon fichier avec la fonction fopen jusqu'a la tous va bien  
// ouverte, lecture , fermeture du fichier et stockage dans un tableau
    // Ici, aussi, j'ai utilisé __FILE__ qui représente le fichier courant
    // mais dans une utilisation courante on utilisera quelque chose comme
    // "/chemin/nomdufichier"
    $tableau = file("conf.txt" );
     
    // affichage du contenu du tableau
    for ($i=0; $i<count($tableau); $i++)  
    {
        echo htmlEntities($tableau[$i]) . "<br/>";
    }
 
voila une fois le fichier afficher je ne sais pas comment attaquer les informations que je veux modifier  

n°2248244
mechkurt
Posté le 13-01-2015 à 12:02:03  profilanswer
 

Tu as ouvert la doc de parse_ini_file ?
$ini_array = parse_ini_file("sample.ini" );
print_r($ini_array);


---------------
D3
n°2248245
naniccino
Posté le 13-01-2015 à 12:04:25  profilanswer
 

oui j'ai essayer avec la fonction parse_ini_file en remplacant sample.ini par mon conf.txt mais cela ne fait rien

n°2248252
rufo
Pas me confondre avec Lycos!
Posté le 13-01-2015 à 13:31:40  profilanswer
 

file() pour lire le fichier.
preg_match() pour les expressions régulières. Explode() pourra t'intéresser aussi.
file_put_contents() pour écrire le fichier. implode() pourra éventuellement te servir aussi.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2248256
naniccino
Posté le 13-01-2015 à 13:57:29  profilanswer
 

pour lire le fichier aucun soucis écrire aussi ma question plus exactement est comment faire pour modifier par exemple la 3eme IP ou une autre valeur  
mon code pour lire le fichier est le suivant  
 
$tableau = file("conf.txt" );
     
    // affichage du contenu du tableau
   for ($i=0; $i<count($tableau); $i++)  
  {
 
     echo htmlEntities($tableau[$i]) . "<br/>";
     
  }
 
jusqu'a la rien de fou j'ouvre le fichier et je met une boucle pour dérouler toutes les lignes de mon fichier une fois que tout est afficher j'aimerais par exemple pouvoir modifier n'importe qu'elle données

n°2248258
rufo
Pas me confondre avec Lycos!
Posté le 13-01-2015 à 14:18:39  profilanswer
 

Dans ta boucle, en plus d'afficher (ou, au lieu de), tu y mets l'algo qui va parser chaque ligne -> preg_match() et explode(). Le résultat du parsing sera mis dans une autre variable de type tableau associatif ayant la structure qui t'arrange le plus.
 
Ex :

Code :
  1.        [0] => array("ip" => array(),
  2.                          "user" => "",
  3.                          "password" => "",
  4.                          "src_path" => "",
  5.                          "dst_path" => "",
  6.                          "packet_size" => 0
  7.                         ),
  8.       [1] => array("ip" => array(),
  9.                         ...
  10. );


Les n° de 0 à n représentent les différents enregistrements. Pour chaque enregistrement, tu retrouves toutes les infos.
 
Avec cette structure, ça va être assez facile d'afficher les données en tableau paginé (par ex), de modifier un enregistrement et de reconstruire le fichier ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 13-01-2015 à 14:18:39  profilanswer
 

n°2248259
naniccino
Posté le 13-01-2015 à 14:27:08  profilanswer
 

ta solution me semble bonne mais je ne vois pas comment l'intégrer a ma boucle

n°2248262
naniccino
Posté le 13-01-2015 à 15:19:46  profilanswer
 

j'ai bricoler un petit scripte qui marche presque lol j'ai une seul erreur
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    $fichier="conf.txt"; // Nom du fichier à modifier
 
        if(isset($_POST['boutton']))
        {    
        unlink($fichier); // suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
        $ouverture=fopen("$fichier","a+" ); // Création du nouveau fichier et ouverture du fichier
        fwrite($ouverture,"$_POST[modif]" ); // ecriture
        fclose($ouverture); // fermeture du fichier
        echo '<h2>Modification effectue</h2>'; // Affichage validation
        }
 
?>
    <form method="post" action="modification.php">
    <TEXTAREA name="modif" rows="10" COLS="40">
<?
    echo file_get_contents($fichier);
?>
    </TEXTAREA>
    <br/><input type="submit" name="boutton" value="Modifier">
    </form>
 
 
je peut acceder a toute les info et modifier mais le probleme est lorsque je clique sur modifier j'ai une erreur  
 
Not Found
 
The requested URL /modification.php was not found on this server.

n°2248276
rufo
Pas me confondre avec Lycos!
Posté le 13-01-2015 à 16:53:59  profilanswer
 

fopen/fwrite/fclose = file_put_contents()
Pourquoi faire (mal en plus !) en 3 instructions ce que tu peux faire en une seule. En effet, le mode "a+", c'est pour faire du "append" (ajout du contenu à la fin du fichier s'il existe déjà). Alors certes, tu fais un unlink() avant. Mais dans ton cas d'utilisation, t'a besoin que du mode w+ (écriture/écrasement).
 
Après, c'est vraiment pas propre du tout de permettre à l'utilisateur de modifier le fichier txt direct sans contrôle des données. dans ce cas, autant utiliser un bête éditeur de texte pour modifier le fichier :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2248277
naniccino
Posté le 13-01-2015 à 16:59:22  profilanswer
 

tout a fait d'accord avec toi mais mon maitre de stage m'oblige a utiliser cette méthode malheureusement alors que ceci peut être fait plus simplement. J'ai réussi a faire fonctionner mon scripte voila ce que ca donne
 
<?php
    $fichier="conf.txt"; // Nom du fichier à modifier
 
        if(isset($_POST['boutton'])) {    
        //if(is_file($fichier)) unlink($fichier); //si le fichier existe :  suppression du fichier pour le remplacer par le nouveau avec les nouveau éléments
        $ouverture=fopen("$fichier","w" ); // Création du nouveau fichier et ouverture du fichier avec le mode w on ouvre le fichier qu'en écriture et unlink devient inutile car le fichier est vidé automatiquement
        fwrite($ouverture,"$_POST[modif]" ); // ecriture
        fclose($ouverture); // fermeture du fichier
        echo '<h2>Modification effectue</h2>'; // Affichage validation
        }
 
?>
    <form method="post" action=""> <!-- j'ai modifié action pour qu'il soit compatible peut importe le nom de la page-->
    <textarea name="modif" rows="10" COLS="40"><?php // fait attention de bien collé les déclaration php au balises html sinon ca ecria les espace dans ton fichier
    if(is_file($fichier)) echo file_get_contents($fichier);  
?></textarea>
    <br/><input type="submit" name="boutton" value="Modifier">
    </form>
 
le scripte marche et fait exactement ce que je veux faire le souci est juste au niveau de la mise en forme j'aimerais juste que ca ressemble a ca  
 
IP: LES ADRESSES (textarea)      (boutton modifier)
User:.....(textarea)                          (boutton modifier
etc jusqu'a la fin du fichier

n°2248279
rufo
Pas me confondre avec Lycos!
Posté le 13-01-2015 à 17:19:44  profilanswer
 

"mon maitre de stage m'oblige a utiliser cette méthode" :??:  
Je serais curieux de connaître ses raisons parce que ça n'a, pour moi, aucun sens.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2248280
naniccino
Posté le 13-01-2015 à 17:22:37  profilanswer
 

pas que pour toi mais la raison est simple le fichier de configuration n'est pas volumineux et il faut que l'utilisateur puisse lui meme modifier ses information car chaque fichier est propre a un utilisateur précis et ceci doit être fait via une page j'espère que cela t'aide a comprendre le GENIE de mon maitre de stage lol
Par contre tu n'aurait pas une solution pour ma question sur le formulaire stp pour faire ceci sur ma page  
 
IP: LES ADRESSES (textarea)      (boutton modifier)  
User:.....(textarea)                          (boutton modifier  
etc jusqu'a la fin du fichier

n°2248281
rufo
Pas me confondre avec Lycos!
Posté le 13-01-2015 à 17:35:36  profilanswer
 

Quel est le rapport entre la taille du fichier et interdire d'utiliser  file_put_contents() à la place de fopen/fwrite/fclose ? :pt1cable:  
 
Pour ton pb, ben tu parses ton fichier pour récupérer les IP et users, pour la mise en forme, HTML + css (float:left; et float:clear; je te laisse chercher sur la doc du CSS la signification de ça).
 
Eventuellement, tu peux faire un tableau pour positionner tes éléments, mais c'est pas très propre :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2248282
naniccino
Posté le 13-01-2015 à 17:39:12  profilanswer
 

ah j'ai pas compris que c'etait pour le fille_put lol il ma obliger a utiliser cette méthode pour ne pas avoir a passer par une BD  
En tout cas merci encore pour votre aide :)

n°2248283
rufo
Pas me confondre avec Lycos!
Posté le 13-01-2015 à 17:45:03  profilanswer
 

Effectivement, si les fichiers sont petits, logique de pas passer par une BD; c'est ce que je t'avais expliqué dans mon premier post. Mais la structure du tableau associatif donnée dans mon 3ème post partait du postulat que tu ne manipulerais que des fichiers (donc pas de BD). Au moins, t'avais pas confondu BD et tableau associatif ? :heink:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2248284
naniccino
Posté le 13-01-2015 à 17:52:56  profilanswer
 

non je n'ai pas confondu je n'ai juste pas bien compris ta méthode de tableau associatif si tu peut me l'expliquer plus en détail si ca ne te dérange pas bien sure

n°2248316
rufo
Pas me confondre avec Lycos!
Posté le 14-01-2015 à 09:54:16  profilanswer
 

Le tableau associatif est juste une structure de données que tu vas charger via le parsing de ton fichier. La structure proposée permet de manipuler assez facilement les données de ton fichier une fois parsé. Les indices 0 à n représentent les différents groupes de données (une groupe allant du champ ip à packet_size). Dans chaque groupe, on retrouve les champs de ton fichier.
 
Ex : si tu veux modifier la 3ème ip du 2ème groupe de données de ton fichier, avec une variable php qui contient la structure et qui s'appellerait $ArrayContent, ça donnerait :
$ArrayContent[1]["ip"][2] = $NewIP;
 
Si tu veux modifier le champ "src_path" du 4ème groupe de données de ton fichier :
$ArrayContent[3]["src_path"] = $NewSrcPath;
 
C'est plus clair ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2248318
naniccino
Posté le 14-01-2015 à 10:02:06  profilanswer
 

oui beaucoup plus clair, je te remercie encore pour ton aide ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Parser un fichier.txt en PHP

 

Sujets relatifs
[RESOLU] [POWERSHELL] Modifier des lignes précises sur un fichier[AJAX] Load d'un fichier XML en ajax
[PHP] Url Rewriting et passage de variables GETrenomer mon fichier excel a l ouverture par deux cellule
[Résolu]Excel 2010 - remplacer chaine de caractère dans un fichierCréation de script avec lecture d'un fichier texte
Formulaire web pour accéder à des données sur fichier excelParser un fichier XML en PHP
[RSS] fichier XML ok mais faut-il obligatoirement le parser avec PHP?[PHP-XML] Parser une variable à la place d'un fichier?
Plus de sujets relatifs à : Parser un fichier.txt en PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR