84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
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.
您必须覆盖整个文件。
因此,对于相对较小的文件,将文件读入数组,搜索单词,替换找到的行,将所有其余内容写入文件。
对于大文件,算法略有不同,但总体上完全相同。
重要的部分是文件锁定
这就是我们更喜欢数据库的原因。
一种可以用于适合您内存的较小文件的方法两次:
$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'); }
您必须覆盖整个文件。
因此,对于相对较小的文件,将文件读入数组,搜索单词,替换找到的行,将所有其余内容写入文件。
对于大文件,算法略有不同,但总体上完全相同。
重要的部分是文件锁定
这就是我们更喜欢数据库的原因。
一种可以用于适合您内存的较小文件的方法两次:
快速说明一下,PHP > 5.3.0 支持 lambda 函数,因此您可以删除命名函数声明并将映射缩短为:
理论上,您可以将其设为单个(更难遵循)php 语句:
对于较大的文件应该使用另一种(内存占用较少的)方法: