我试图通过AJAX使用php调用来替换.txt文件的单行,其中我存储了用户特定的信息。问题是,如果我一旦到达正确的行使用fwrite,它会留下任何先前的信息,这些信息比最后未触及的替换信息更长。有没有一种简单的方法可以清除.txt文件中的单行,我可以先调用php? 正在发生的事情的例子 - 假设我正在存储喜欢的作曲家,并且用户在他们的.txt文件中有“贝多芬”,并希望将其更改为“莫扎特”,当我使用“贝多芬”和“莫扎特”时使用fwrite ,我将“Mozartven”作为新系列。我在fopen调用中使用“r +”,因为我一次只想替换一行。
答案 0 :(得分:1)
如果不需要为非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));
答案 1 :(得分:0)
这是我前段时间写的一段代码,用于删除文件中的行,必须进行修改。此外,如果新线比旧线短,它将正常工作,对于更长的线,需要进行大量修改。
键是第二个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);
?>