Если вы хотите изменить файл с середины, используйте режим открытия 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()
здесь.