使用PHP写入文件

时间:2010-12-19 16:12:03

标签: php html xml fopen

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

2 个答案:

答案 0 :(得分: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语法......

答案 1 :(得分:1)

如果您希望能够从中间修改文件,请使用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->getLineNo()是关键所在。