Remplacer une Ligne dans le Fichier PHP
Quelle est la meilleure façon de remplacer une ligne spécifique dans un fichier? En gros, je veux rechercher un fichier pour la chaîne "@parsethis " et remplacer le reste de la ligne, avec quelque chose d'autre.
Vous devez vous connecter pour publier un commentaire.
Si le fichier n'est pas trop grande, la meilleure façon serait probablement pour lire le fichier dans un tableau de lignes avec fichier(), recherche par le biais de la matrice de lignes pour votre chaîne et modifier cette ligne, puis implode() le tableau d'ensemble et fwrite() dans le fichier.
Si le fichier est très gros (fichiers log ou quelque chose comme cela) et vous êtes prêt à sacrifier la vitesse pour la consommation de la mémoire vous pouvez ouvrir deux fichiers, et essentiellement de faire le tour Jeremy Ruten proposée à l'aide des fichiers au lieu de la mémoire système.
Votre principal problème est le fait que la nouvelle ligne peut ne pas être de la même longueur que l'ancienne ligne. Si vous avez besoin de changer la longueur de la ligne, il n'y a aucun moyen de sortir de la réécriture au moins tous les fichiers après la ligne modifiée. Le plus simple est de créer un nouveau fichier modifié, puis le déplacer par rapport à l'original. De cette façon, il ya un dossier complet disponible à tout moment pour les lecteurs. Utiliser le verrouillage pour s'assurer que seulement un script, c'est de modifier le fichier à la fois, et puisque vous allez de remplacer le fichier, ne le verrouillage sur un fichier différent. Découvrez
flock()
.Si vous êtes certain que la nouvelle ligne sera de la même longueur que l'ancienne ligne, vous pouvez ouvrir le fichier en mode lecture/écriture (utiliser
r+
comme deuxième argumentfopen()
) et d'appelerftell()
pour enregistrer la position de la ligne démarre à chaque fois avant d'appelerfgets()
pour lire une ligne. Une fois que vous trouver la ligne, que vous voulez écraser, vous pouvez utiliserfseek()
pour revenir au début de la ligne etfwrite()
les nouvelles données. Un moyen de forcer la ligne de toujours être de la même longueur est de l'espace tampon à la longueur maximale possible.ou si votre fichier n'est pas trop grande:
Vous aurez à choisir les séparateurs '#' qui ne sont pas présents dans le fichier si.
C'est une solution qui fonctionne pour la réécriture d'une seule ligne d'un fichier avec sed à partir de PHP. Mon fichier ne contient que le style de vars et est mis en forme:
$styleVarName: styleVarProperty;\n
Pour cela, j'ai d'abord ajouter les ":" à la fin de myStyleVarName, et sed remplace le reste de cette ligne avec la nouvelle propriété et ajoute un point-virgule.
Assurez-vous que les caractères sont échappées dans myStyleVarProp.
Si vous voulez remplacer complètement le contenu d'un fichier avec le contenu d'un autre fichier, vous pouvez utiliser ceci:
Ainsi, dans la première ligne, vous sauvegardez le fichier et dans la deuxième ligne, vous remplacez le fichier avec le contenu du nouveau fichier.
Aussi loin que je peux le renommer retourne un booléen. Vrai si le changement de nom est couronnée de succès, et false en cas d'échec. On pourrait, par conséquent, n'exécutez la deuxième étape, si la première étape est réussie pour éviter d'écraser le fichier, sauf si une sauvegarde a été effectuée avec succès. Découvrez:
https://www.php.net/manual/en/function.rename.php
Espère que c'est utile à quelqu'un.
Acclamations
Adrian
J'avais plus de chances de faire ce que Jeremy a suggéré, mais juste une autre façon de faire ici, c'est une autre solution. Cela n'a pas été testé ou utilisé pour les systèmes *nix.