Remplacer une ligne entière dans un fichier texte lorsqu'un mot spécifique est rencontré
P粉883278265
P粉883278265 2023-10-18 16:59:05
0
2
490

Comment remplacer des lignes de texte spécifiques dans un fichier en utilisant php ?

Je ne connais pas le numéro de ligne. Je souhaite remplacer les lignes contenant des mots spécifiques.

P粉883278265
P粉883278265

répondre à tous(2)
P粉138711794

Vous devez écraser l'intégralité du fichier.

Donc, pour un fichier relativement petit, lisez le fichier dans un tableau , recherchez le mot, remplacez les lignes trouvées et écrivez tout le reste dans le fichier.

Pour les gros fichiers, l'algorithme est légèrement différent, mais globalement c'est exactement le même.

La partie importante est le Verrouillage de fichiers

C'est pourquoi nous préférons les bases de données.

P粉155710425

Une méthode qui peut être utilisée pour des fichiers plus petits qui tiennent dans votre mémoire deux fois :

$data = file('myfile'); // reads an array of lines
function replace_a_line($data) {
   if (stristr($data, 'certain word')) {
     return "replacement line!\n";
   }
   return $data;
}
$data = array_map('replace_a_line', $data);
file_put_contents('myfile', $data);

Remarque rapide, PHP > 5.3.0 prend en charge les fonctions lambda, vous pouvez donc supprimer la déclaration de fonction nommée et raccourcir le mappage à :

$data = array_map(function($data) {
  return stristr($data,'certain word') ? "replacement line\n" : $data;
}, $data);

Théoriquement, vous pourriez en faire une seule déclaration php (plus difficile à suivre) :

file_put_contents('myfile', implode('', 
  array_map(function($data) {
    return stristr($data,'certain word') ? "replacement line\n" : $data;
  }, file('myfile'))
));

Pour les fichiers plus volumineuxune autre méthode (moins gourmande en mémoire) doit être utilisée :

$reading = fopen('myfile', 'r');
$writing = fopen('myfile.tmp', 'w');

$replaced = false;

while (!feof($reading)) {
  $line = fgets($reading);
  if (stristr($line,'certain word')) {
    $line = "replacement line!\n";
    $replaced = true;
  }
  fputs($writing, $line);
}
fclose($reading); fclose($writing);
// might as well not overwrite the file if we didn't replace anything
if ($replaced) 
{
  rename('myfile.tmp', 'myfile');
} else {
  unlink('myfile.tmp');
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal