|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Bien le bonjour,
décidément aujourd'hui je ne rencontre que des soucis avec php En effet, j'essaye d’éditer un fichier grâce à une boucle foreach un objet SplFileObject. Le hic c'est que cette boucle me lit qu'une ligne sur deux au lieu de lire toutes les lignes.Je me suis dit que c’était mon fichier qui était mal formaté, j'ai donc décider de faire un script qui vas écrire puis lire le dit fichier et là oh magie, j'ai le même souci. En effet, bien que le fichier soit écrit correctement, je ne parviens à lire qu'une ligne sur deux, et encore, quand je met le flag setFlags(SplFileObject::SKIP_EMPTY); sinon j'ai mes lignes (toujours une sur deux) et un beau runtime exception qui me remonte seulement le fait que php ne parvient pas à lire le fichier alors qu'il m'écrit bien mes lignes précédentes Bref, si vous avez une idée, voici le code (on sait jamais). Lecture du fichier: Code :
Code :
|
||||
|
|
00
|
|
|
#2 | |||||
|
Membre confirmé
![]() Hugo VacherÉtudiant Inscription : mai 2008 Messages : 158 ![]() |
Citation:
Je ne connais pas SplFileObject, mais ce que tu fait la me semble faux. Tu parcourt déjà les lignes avec ton foreach, pourquoi re-récupérer la ligne avec fgets ? Essaye donc ça : Code :
__________________
|
|||||
|
00
|
|
|
#3 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Effectivement, je me suis fait la même réflexion étant donné que SplFileObject est un objet itéré.
Je vais tester sans cet appel à fgets. Edit: Bon je viens de tester ça fonctionne. Je ne sais pas pourquoi le fgets à ce comportement par contre vue que lui ce qu'il fait c'est lire le contenu de son pointeur courant, donc en théorie on est dans une boucle, il devrait être capable de lire toutes les lignes et pas une sur deux. PS: Si je me fourvoie, n'hésitez pas à me renseigner |
|
|
00
|
|
|
#4 | ||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Bien, j'ai bien résolu le souci de lecture de mon foreach, malheureusement, j'ai maintenant un souci avec une comparaison puis modification de string à l'intérieur de cette boucle.
En effet, j'ai une string A qui doit être comparé à la ligne courante afin de savoir si elles sont identique et le cas échéant modifier la ligne courante pour lui ajouter un morceau en plus. Le hic c'est que le script coupe après 30 sec d'activité, ce qui pour moi est normal car la comparaison ne devrait pas être aussi longue. Voici mon code: Code :
J'ai essayer avec un preg_match_all, avec un strpos ou simplement avec $var1 === $var2 mais j'ai toujours le même souci, je ne comprend pas pourquoi le preg_match prend autant de temps alors que je lui demande simplement de comparait le motif de la ligne courante avec le motif patron. Sachant que le fichier parsé ne fait que 6 lignes au maximum, ce comportement me parait un peu étrange .J'ai surement du encore oublier quelque chose, mais je ne vois pas trop quoi.
|
||
|
|
00
|
|
|
#5 |
![]() ![]() Inscription : septembre 2010 Messages : 7 104 ![]() |
fait un preg_replace plutot voir utilise le regexiterator, si tu veux lire un fichier ini utilise le parse_ini_file
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#6 | ||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Je vais tester le preg_replace, par contre, je pense avoir trouvé mon souci.
En effet je suis dans une boucle foreach, dans laquelle je test si la ligne courante est correspondante, malheureusement, si elle ne l'est pas, le if vas etre faux et passer la main au else, qui lui, se charge de rediriger l'utilisateur. Hors, comme le if est faux des le premier test, on sort du script directement, sans parcourir les lignes suivantes. Donc j'ai testé avec le script suivant: Code :
|
||
|
|
00
|
|
|
#7 | |
|
Membre confirmé
![]() Hugo VacherÉtudiant Inscription : mai 2008 Messages : 158 ![]() |
Citation:
donc quand tu fait le fgets tu lie la ligne suivante et tu perd celle lue par le foeach (qui doit surement faire appel à fgets en interne).
__________________
|
|
|
00
|
|
|
#8 | |
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Citation:
Problème résolu. Merci bien |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com