【问题标题】:Write to a file using PHP使用 PHP 写入文件
【发布时间】:2010-12-19 16:12:02
【问题描述】:

基本上我想要做的是使用 PHP 打开一个 xml 文件并使用 php 编辑它,现在我可以使用 fopen() 函数来完成。 然而我的问题是我想将文本附加到文档的中间。所以假设 xml 文件有 10 行,我想在最后一行 (10) 之前附加一些内容,所以现在它将是 11 行。这可能吗。谢谢

【问题讨论】:

标签: php html xml fopen


【解决方案1】:

根据该文件的大小,您可能会这样做:

$lines = array();
$fp = fopen('file.xml','r');
while (!feof($fp))
   $lines[] = trim(fgets($fp));
fclose($fp);

array_splice($lines, 9, 0, array('newline1','newline2',...));

$new_content = implode("\n", $lines);

不过,您之后仍需要重新验证 XML 语法...

【讨论】:

  • 好吧,在 9 之后,0 是什么意思。你有 newline1 和 newline2 的地方是我要放置信息的地方吗?
  • 有关详细信息,请参阅array_splice() 文档。 9 是插入新元素的位置。 0 是您想要替换的索引 9 之后的元素数(在您的情况下,我猜是没有?),然后是替换数组。
  • 好的,这看起来不错,但看起来你关闭了 $fp 这是否仍然保存新文本?
  • 坏主意...使用正确的 xml 解析
  • @ajreal 我知道。这就是为什么我暗示要重新验证语法。与使用 XML 解析工具相比,开销仍然更少(假设文件相对较小),后者只能解析和(如果有的话)重构有限的方式......
【解决方案2】:

如果您希望能够从中间修改文件,请使用c+ 打开模式:

$fp = fopen('test.txt', 'c+');

for ($i=0;$i<5;$i++) {
   fgets($fp);
}

fwrite($fp, "foo\n");
fclose($fp);

上面将在第五行写入“foo”,而不必完全读取文件。

但是,如果您要修改 XML 文档,最好使用 DOM 解析器:

$dom = new DOMDocument;
$dom->load('myfile.xml');

$linenum = 5;
$newNode = $dom->createElement('hello', 'world');

$element = $dom->firstChild->firstChild; // skips the root node
while ($element) {
    if ($element->getLineNo() == $linenum) {
        $element->parentNode->insertBefore($newNode, $element);
        break;
    }
    $element = $element->nextSibling;
}

echo $dom->saveXML();

当然,上面的代码取决于实际的 XML 文档结构。但是,$element-&gt;getLineNo() 是这里的关键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多