在php

时间:2018-02-10 20:05:03

标签: php

我为我的网站创建了一个文本站点地图,如下所示:

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);

有更好的方法吗?

1 个答案:

答案 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

这取决于您如何构建文件。