當遇到特定單字時替換文字檔案中的整行
P粉883278265
P粉883278265 2023-10-18 16:59:05
0
2
450

如何使用 php 替換檔案中的特定文字行?

我不知道行號。我想替換包含特定單字的行。

P粉883278265
P粉883278265

全部回覆(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');
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!