Как сместить указатель файла на нужную позицию?

AG
На сайте с 24.04.2007
Offline
115
833

Суть проблемы в следующем. Есть sitemap.xml и скриптом нужно дописывать новые урлы в него.

Все сделал кроме одного, структура sitemap.xml такова, что новые записи нужно дописывать перед </urlset>


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="gss.xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!--#Generated by SOFTplus GSiteCrawler v1.23 rev. 286 by SOFTplus Entwicklungen GmbH, http://gsitecrawler.com/, http://johannesmueller.com/gs/ -->
<url><loc>http://www.site.ru/</loc><lastmod>2009-03-12T17:26:25+00:00</lastmod><changefreq>daily</changefreq><priority>1.00</priority></url>
Новая запись -- Новая запись -- Новая запись---
</urlset>

Я написал такую штуку (не плюйтесь, я программер самоучка, что умею, то и пишу :))

function add_to_sitemap()

{
$this->sql_query="SELECT * FROM .... запрос";
//echo $this->sql_query;
$this->sql_execute();

$f_open=fopen("sitemap.xml","r+");

while($row=mysql_fetch_array($this->sql_res))
{
$new_url="<url><loc>урл страницы.html</loc><lastmod>".date("Y-m-d")."T".date("H:i:s")."+00:00</lastmod><changefreq>daily</changefreq><priority>0.50</priority></url>";
fseek($f_open,что тут написать?,SEEK_END); // !!--- Камень преткновения ---!!

fwrite($f_open,$new_url);
}

fclose($f_open);
}

Вот с функцией fseak() затык у меня. Никогда раньше не пользовался и не могу понять что написать в offset, чтобы указатель файла установился перед </urlset>. Знаю, что величина должна быть отрицательная.

Поможете?

J
На сайте с 02.02.2009
Offline
53
#1

эм

может быть использовать strpos ?=)

AG
На сайте с 24.04.2007
Offline
115
#2
jumash:
эм

может быть использовать strpos ?=)

Может быть, еще бы сказали как ее туда прилепить :)

Сам вроде разобрался, offset -9.

Только в конце работы скрипта нужно самому дописывать </urlset>.

J
На сайте с 02.02.2009
Offline
53
#3
AlexGM:
Может быть, еще бы сказали как ее туда прилепить :)


Сам вроде разобрался, offset -9.
Только в конце работы скрипта нужно самому дописывать </urlset>.

-9 будет только в том случае, если урлсет - в конце файла=)

Соответственно, если после urlset есть что-то ещё - надо вычислять позицию строки и подставлять её как оффсет - собственно, вычисление позиции строки - это и есть strpos

как-то так


$string = "xxx yyy </urlset> smth more"; # предположим, что это - считанный контент из файла
$pos = strpos($string)-length($string);
fseek($f_open,$pos,SEEK_END);

jumash добавил 17.03.2009 в 11:42

хехе, а если urlset - единственно встречающееся, - то даже париться не надо=)

считываете файл в переменную, и потом - $content = str_replace("</urlset>","....</urlset>",$content);

AG
На сайте с 24.04.2007
Offline
115
#4

</urlset> он и есть закрывающий тег всего этого безобразия. Поэтому он последний всегда в файле, после него ничего нет и не должно быть.

В любом случае, спасибо за помощь.

Только теперь Google ругается на готовый сайтмап, наверное из-за того, что каждый <url></url> не с новой строки начинается.

J
На сайте с 02.02.2009
Offline
53
#5
AlexGM:
</urlset> он и есть закрывающий тег всего этого безобразия. Поэтому он последний всегда в файле, после него ничего нет и не должно быть.

В любом случае, спасибо за помощь.

Только теперь Google ругается на готовый сайтмап, наверное из-за того, что каждый <url></url> не с новой строки начинается.

Новая строка - это "\n" - в двойных кавычках


$new_url="<url><loc>урл страницы.html</loc><lastmod>".date("Y-m-d")."T".date("H:i:s")."+00:00</lastmod><changefreq>daily</changefreq><priority>0.50</priority></url>\n";

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий