移动文件指针向上一行(PHP)?

3 php file-io

我试图在我的网站上自动化sitemap.xml文件,因为内容不断变化.我目前打开文件进行追加:fopen($file_name, 'a');这样我就可以添加新的标签集了.但是,我只是注意到整个站点地图文件必须以标记结束,这意味着每次打开文件时,我都需要将文本追加到文件的末尾,而不是从末尾追加到1行.

所以基本上,在打开文件后如何移动文件指针以便我可以实现这个目的?谢谢.

更新:这是站点地图的样子:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
    <url>
        <loc>...</loc>
        <lastmod>2009-08-23</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
    </url>
    </urlset>
Run Code Online (Sandbox Code Playgroud)

所以每当我追加时,我都需要添加<url>..</url>必须在结束</urlset>标记之前的部分.我已经有了可以将xml附加到文件末尾的代码.我只需要弄清楚如何在结束标记之前附加新部分.

Cha*_* Ma 7

使用php fseek()寻找文件的末尾(使用filesize()查找),然后向后迭代一行.读取最后一行并暂时存储它.用您要插入的内容覆盖最后一行,然后附加先前存储的临时行.

要向后迭代一行,使用fseek结合fgetc()

$offset = filesize($fhandle) - 1;
fseek($fhandle, $offset--); //seek to the end of the line
while(fgetc($fhandle) != '\n') {
   fseek($fhandle, $offset--);
}
Run Code Online (Sandbox Code Playgroud)

现在你的内部文件指针应该指向最后一行之前的一行.当然,当你的文件只有一行时,你将不得不处理极端情况,但我会让你弄清楚细节;)

现在将最后一行存储在tmp变量中

$lastline = fgets($fhandle);
fseek($fhandle, $offset); //go back to where the last line began
Run Code Online (Sandbox Code Playgroud)

插入您的行,并将最后一行附加到文件的末尾

fwrite($fhandle, $myLine);
fwrite($fhandle, $lastline);
Run Code Online (Sandbox Code Playgroud)