Ersetzen Sie eine ganze Zeile in einer Textdatei, wenn ein bestimmtes Wort gefunden wird
P粉883278265
P粉883278265 2023-10-18 16:59:05
0
2
429

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粉883278265
P粉883278265

Antworte allen(2)
P粉138711794

您必须覆盖整个文件。

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

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

重要的部分是文件锁定

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

P粉155710425

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

$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');
}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!