Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP写入文件_Php_Html_Xml_Fopen - Fatal编程技术网

使用PHP写入文件

使用PHP写入文件,php,html,xml,fopen,Php,Html,Xml,Fopen,基本上,我想做的是使用PHP打开一个xml文件并使用PHP编辑它。现在,我可以使用fopen()函数来完成这项工作。 但我的问题是,我想在文档中间添加文本。假设xml文件有10行,我想在最后一行(10)之前添加一些内容,现在是11行。这可能吗。谢谢根据文件的大小,您可以执行以下操作: $lines = array(); $fp = fopen('file.xml','r'); while (!feof($fp)) $lines[] = trim(fgets($fp)); fclose($f

基本上,我想做的是使用PHP打开一个xml文件并使用PHP编辑它。现在,我可以使用fopen()函数来完成这项工作。
但我的问题是,我想在文档中间添加文本。假设xml文件有10行,我想在最后一行(10)之前添加一些内容,现在是11行。这可能吗。谢谢

根据文件的大小,您可以执行以下操作:

$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语法…

如果您希望能够从中间修改文件,请使用
c+
打开模式:

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

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

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

当然,上面的代码取决于实际的XML文档结构。但是,这里的关键是
$element->getLineNo()

在9之后,好的,0代表什么。在有newline1和newline2的地方,我会把信息放在哪里?详细信息请参阅文档。9是插入新元素的位置。0是索引9之后要替换的元素数(我想在您的情况下,没有),这些元素后面是替换数组。好吧,这看起来不错,但看起来您关闭了$fp。这是否仍然保存新文本?坏主意。。。使用适当的xmlparsing@ajreal我知道。这就是为什么我暗示要重新验证语法。不过,与使用XML解析工具相比,它的开销更小(前提是文件相对较小),因为XML解析工具只能以有限的方式进行解析和(如果有的话)重构。。。
$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();