使用PHP写入文件
Bassicly我想要做的是使用PHP打开一个xml文件并使用php编辑它,现在我可以使用fopen()函数。 但我的问题是,我想追加文本到文档的中间。所以可以说XML文件有10行,我想在最后一行(10)之前附加一些东西,所以现在它将是11行。这可能吗。由于使用PHP写入文件
根据该文件有多大,你可以这样做:
$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是我要把信息放在哪里? – DonJuma 2010-12-19 16:24:45
有关详细信息,请参见[array_splice()](http://www.php.net/manual/en/function.array-splice.php)文档。 9是插入新元素的位置。 0是你想要替换的索引9之后的元素数目(无,在你的情况下,我假设?),然后是替换数组。 – 2010-12-19 16:27:04
好吧,所以这看起来不错,但它看起来像你关闭$ fp这是否仍然保存新文本? – DonJuma 2010-12-19 16:32:49
如果你希望能够到修改从中间文件,使用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()
是这里的关键。
http://php.net/manual/en/function.domnode-insert-before.php – seriousdev 2010-12-19 16:15:30