簡體   English   中英

使用php替換.txt文件的一行

[英]replacing a single line of a .txt file using php

我試圖通過AJAX使用php調用來替換.txt文件的一行,其中存儲了用戶特定的信息。 問題是,如果我使用fwrite一次到達正確的行,它將留下所有比結束時未觸及的替換信息更長的先前信息。 有沒有一種簡單的方法可以用php清除.txt文件中的一行,我可以先調用它? 發生的情況的例子-假設我正在存儲最喜歡的作曲家,並且用戶在.txt文件中包含“ Beethoven”,並希望將其改寫為“ Mozart”,當我在“ Beethoven”和“ Mozart”上使用fwrite ,我將“ Mozartven”作為新線。 我在fopen調用中使用“ r +”,因為我只想一次替換一行。

如果不需要向非PHP應用程序提供此配置數據,請考慮改用var_export() 它基本上是var_dump / print_r,但是將變量輸出為可解析的PHP代碼。 這會將您的代碼減少為:

include('config.php');
$CONFIG['musician'] = 'Mozart';
file_put_contents('config.php', '<?php $CONFIG = ' . var_export($CONFIG, true));

這是我前一段時間編寫的用於從文件中刪除行的代碼,必須對其進行修改。 而且,如果新行比舊行短,它將正常工作,對於更長的行,將需要大量修改。

密鑰是第二個while循環,其中更改后的文件的所有內容都將重新寫入文件中的正確位置。

<?php
$size = filesize('test.txt');
$file = fopen('test.txt', 'r+');
$lineToDelete = 3;
$counter = 1;

while ($counter < $lineToDelete) {
   fgets($file); // skip
   $counter++;

}

$position = ftell($file);
$lineToRemove = fgets($file);
$bufferSize = strlen($lineToRemove);
while ($newLine = fread($file, $bufferSize)) {
   fseek($file, $position, SEEK_SET);
   fwrite($file, $newLine);
   $position = ftell($file);
   fseek($file, $bufferSize, SEEK_CUR);

}
ftruncate($file, $size - $bufferSize);
echo 'Done';
fclose($file);
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM