2011-09-30 122 views
1

我想通过AJAX使用php调用来替换一个.txt文件的单行,其中存储了用户特定的信息。问题是,如果我一旦使用fwrite进入正确的行,它就会留下任何先前的信息,这些信息比最后未更改的信息长。有没有简单的方法来清除.txt文件中的一行,我可以先打电话给php? 发生了什么事情的例子 - 比方说,我正在存储最喜欢的作曲家,并且一个用户在他们的.txt文件中有“Beethoven”,并且当我用“Mozart”将fwrite改写为“Mozart”时, “,我正在把”莫扎特文“作为新的路线。我在fopen调用中使用“r +”,因为我只想一次替换一行。使用php替换一个.txt文件的单行使用php

+8

这就是我们使用数据库的原因。 – ceejayoz

回答

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); 
?> 
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));