开发者

Write to a file using PHP

Bassicly what I want to do is using PHP open a xml file and edit it using php now this I can do using fopen() function. Yet my 开发者_如何学运维issue it that i want to append text to the middle of the document. So lets say the xml file has 10 lines and I want to append something before the last line (10) so now it will be 11 lines. Is this possible. Thanks


Depending on how large that file is, you might do:

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

Still, you'll need to revalidate XML-syntax afterwards...


If you want to be able to modify a file from the middle, use the c+ open mode:

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

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

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

The above will write "foo" on the fifth line, without having to read the file entirely.

However, if you are modifying a XML document, it's probably better to use a DOM parser:

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

Of course, the above code depends on the actual XML document structure. But, the $element->getLineNo() is the key here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜