【问题标题】:Write to file using SplFileObject()使用 SplFileObject() 写入文件
【发布时间】:2014-05-10 14:27:27
【问题描述】:

我正在尝试使用 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。

【问题讨论】:

  • 不幸的是,它不是这样工作的。写入文件是以字节为单位的,而不是行。您必须编写新行(从旧行开始),但还必须重新编写文件的其余部分以弥补行长的差异(如果行的长度不同)。根据您实际尝试使用此文件执行的操作,可能会有更好的选择。
  • 您有什么建议吗?
  • 视情况而定。线都是等长的吗?你如何反对覆盖文件?你会反对像 SQLite (row = line) 这样的东西而不是文本文件吗? …
  • 其实是另一个PHP文件,行长不一。
  • 有什么原因你不能写出一个新文件,它是带有添加字符串的当前文件的副本?

标签: php splfileobject


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-03-24
    • 2019-03-25
    • 2012-06-07
    • 2021-05-29
    • 2011-05-20
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多