84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
如何使用 php 替換檔案中的特定文字行?
我不知道行號。我想替換包含特定單字的行。
您必須覆寫整個檔案。
因此,對於相對較小的文件,將文件讀入數組,搜尋單詞,替換找到的行,將所有其餘內容寫入文件。
對於大文件,演算法略有不同,但總體上完全相同。
重要的部分是檔案鎖定
這就是我們更喜歡資料庫的原因。
一種可以用於適合您記憶體的較小檔案的方法兩次:
$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 語句:
對於較大的檔案應該使用另一種(記憶體佔用較少的)方法: