suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Ersetzen Sie eine ganze Zeile in einer Textdatei, wenn ein bestimmtes Wort gefunden wird

Wie ersetze ich bestimmte Textzeilen in einer Datei mit PHP?

Ich kenne die Zeilennummer nicht. Ich möchte Zeilen ersetzen, die bestimmte Wörter enthalten.

P粉883278265P粉883278265422 Tage vor475

Antworte allen(2)Ich werde antworten

  • P粉138711794

    P粉1387117942023-10-19 13:40:07

    您必须覆盖整个文件。

    因此,对于相对较小的文件,将文件读入数组,搜索单词,替换找到的行,将所有其余内容写入文件

    对于大文件,算法略有不同,但总体上完全相同。

    重要的部分是文件锁定

    这就是我们更喜欢数据库的原因。

    Antwort
    0
  • P粉155710425

    P粉1557104252023-10-19 13:24:24

    一种可以用于适合您内存的较小文件的方法两次

    $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);

    快速说明一下,PHP > 5.3.0 支持 lambda 函数,因此您可以删除命名函数声明并将映射缩短为:

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

    理论上,您可以将其设为单个(更难遵循)php 语句:

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

    对于较大的文件应该使用另一种(内存占用较少的)方法:

    $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');
    }

    Antwort
    0
  • StornierenAntwort