Parser un fichier.txt en PHP - PHP - Programmation
Marsh Posté le 13-01-2015 à 11:15:44
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.
Marsh Posté le 13-01-2015 à 11:22:52
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
Marsh Posté le 13-01-2015 à 11:39:10
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.
Marsh Posté le 13-01-2015 à 11:56:55
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
Marsh Posté le 13-01-2015 à 12:04:25
oui j'ai essayer avec la fonction parse_ini_file en remplacant sample.ini par mon conf.txt mais cela ne fait rien
Marsh Posté le 13-01-2015 à 13:31:40
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.
Marsh Posté le 13-01-2015 à 13:57:29
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
Marsh Posté le 13-01-2015 à 14:18:39
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 :
|
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
Marsh Posté le 13-01-2015 à 14:27:08
ta solution me semble bonne mais je ne vois pas comment l'intégrer a ma boucle
Marsh Posté le 13-01-2015 à 15:19:46
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.
Marsh Posté le 13-01-2015 à 16:53:59
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
Marsh Posté le 13-01-2015 à 16:59:22
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
Marsh Posté le 13-01-2015 à 17:19:44
"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.
Marsh Posté le 13-01-2015 à 17:22:37
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
Marsh Posté le 13-01-2015 à 17:35:36
Quel est le rapport entre la taille du fichier et interdire d'utiliser file_put_contents() à la place de fopen/fwrite/fclose ?
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
Marsh Posté le 13-01-2015 à 17:39:12
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
Marsh Posté le 13-01-2015 à 17:45:03
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 ?
Marsh Posté le 13-01-2015 à 17:52:56
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
Marsh Posté le 14-01-2015 à 09:54:16
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 ?
Marsh Posté le 14-01-2015 à 10:02:06
oui beaucoup plus clair, je te remercie encore pour ton aide
Marsh Posté le 13-01-2015 à 10:38:42
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.