我为我的网站创建了一个文本站点地图,如下所示:
sitemap.txt:
https://example.com/
https://example.com/estate/showAll
https://example.com/estate/search
https://example.com/site/about
https://example.com/site/contact
https://example.com/post/show/41
https://example.com/post/show/42
https://example.com/post/show/43
当用户删除帖子42时,我的站点地图应更改为:
https://example.com/
https://example.com/estate/showAll
https://example.com/estate/search
https://example.com/site/about
https://example.com/site/contact
https://example.com/post/show/41
https://example.com/post/show/43
我试过这些方法,但他们并没有像预期的那样工作:
$sitmap = file_get_contents('sitemap.txt');
$line = 'https://example.com/post/show/42';
$sitmap =str_replace($line, '', $sitmap);
file_put_contents('sitemap.txt', $sitmap);
此代码在sitemap.txt中显示一个空行
$sitmap = file_get_contents('sitemap.txt');
$line = 'https://example.com/post/show/42';
$sitmap =str_replace($line, '', $sitmap);
$sitmap =str_replace($line, chr(8), $sitmap);
file_put_contents('sitemap.txt', $sitmap);
chr(8)显示退格字符BS
,它不会删除空换行符。
我使用下面的代码完成了它,但我认为如果sitemap.txt变大则会占用太多内存
$sitmap = file_get_contents('sitemap.txt');
$line = 'https://example.com/posst/show/'. $id;
$sitmap = explode(PHP_EOL, $sitmap);
if ($key = array_search($line, $sitmap)) {
unset($sitmap[$key]);
}
$sitmap = implode(PHP_EOL, $sitmap);
file_put_contents('sitemap.txt', $sitmap);
有更好的方法吗?
答案 0 :(得分:3)
您只需替换第+行换行符(\n
):
$line = 'https://example.com/post/show/'. $id;
$file = 'sitemap.txt';
file_put_contents($file,
str_replace("$line\n", '', file_get_contents($file))
);
正如Nigel Ren指出的那样(请参阅下面的评论),"$line\n"
应该替换为$line.PHP_EOL
。
这取决于您如何构建文件。