Записать в файл используя PHP - PullRequest
1 голос
/ 19 декабря 2010

В основном я хочу использовать PHP, открыть XML-файл и отредактировать его с помощью php, теперь я могу это сделать с помощью функции fopen (). И все же моя проблема в том, что я хочу добавить текст в середину документа. Допустим, у файла xml есть 10 строк, и я хочу добавить что-то перед последней строкой (10), так что теперь это будет 11 строк. Это возможно. Спасибо

Ответы [ 2 ]

1 голос
/ 19 декабря 2010

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

1 голос
/ 19 декабря 2010

В зависимости от того, насколько велик этот файл, вы можете сделать:

$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-синтаксис впоследствии ...

...