使用SplFileObject()写入文件

4
我将使用SplFileObject()逐行编辑文件。我可以选择要编辑的文件行。但是,如何向该行写入$string?
以下是获取行的代码:
<?php
$file = new SplFileObject('myfile.txt');
$file->seek(9999);     // Seek to line no. 10,000
echo $file->current(); // Print contents of that line
?>

我怎么在那一行插入一个字符串?
注意,我不想覆盖文件,我只是想在给定的行插入一个$string。

不幸的是,它并不是这样工作的。文件写入是按字节而不是行进行的。您将不得不编写新行(从旧行开始的位置),但还必须重新编写文件的其余部分以弥补行长度差异(如果行长度不同)。根据您使用此文件实际尝试做什么,可能会有更好的替代方案。 - salathe
你有什么建议吗? - user3143218
取决于情况。这些行的长度是否都相等?你有多反感覆盖文件?您是否愿意使用类似SQLite(行=行)而不是文本文件的东西?… - salathe
实际上这是另一个PHP文件,行的长度各不相同。 - user3143218
2
你有什么原因不能写一个新文件,将当前文件复制并添加字符串吗? - Ryan Vincent
1个回答

2

这可能不是最好的解决方案,因为它会读取整个文件并将其存储在字符串中。但由于没有其他答案,您可以将其用作最后的资源。

$ouput = '';
$file = new SplFileObject("your_file.xxx", 'r');
while (!$file->eof()) {
    $line = $file->fgets();
    if($line == 'your_condition'){
       $line = 'replace this line';
    }
    $output .= $line;
}
$file = null;

$file = new SplFileObject("your_file.xxx", 'w+');
$file->fwrite($output);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接