[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись google sitemap в xml файл на php
Lenokk
Здравствуйте! Передо мной стоит такая задача - имеется скрипт поиска, в нем есть файл, который генерит google sitemap и выводит ее - но в виде php файла, а не xml.

PHP
$isearch_path dirname(__FILE__);
define('IN_ISEARCH'true);

require_once 
"$isearch_path/inc/core.inc.php";
require_once 
"$isearch_path/inc/search.inc.php";

isearch_open(True);

$result mysql_query("SELECT url, lastmod, changefreq, priority FROM $isearch_table_urls ORDER BY url"$isearch_ro_db);
if (!
$result)
{
    echo 
"<p>MySQL error : " mysql_error() . ' File: ' __FILE__ ', Line:' __LINE__ "</p>\n";
}
else if (
mysql_num_rows($result) > 0)
{

    if (
$isearch_config['char_set_8_bit'])
    {
        
$trans get_html_translation_table(HTML_ENTITIES);
    }
    else
    {
        
$trans get_html_translation_table(HTML_SPECIALCHARS);
    }

    echo 
'<?xml version="1.0" encoding="UTF-8"?>

<!-- Powered by iSearch2                     -->
<!-- [url]http://www.iSearchTheNet.com/isearch[/url]    -->

<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
'
;
    while (
$item mysql_fetch_object($result))
    {
        echo 
'
  <url>
    <loc>'
.strtr($item->url$trans).'</loc>
'
;
        if (
$item->lastmod 0)
        {
            echo 
'    <lastmod>'.date('Y-m-d'$item->lastmod).'T'.date('H:i:s'$item->lastmod).'+00:00</lastmod>
'
;
        }
        if (
$item->changefreq != '')
        {
            echo 
'    <changefreq>'.$item->changefreq.'</changefreq>
'
;
        }
        if (
$item->priority >= 0)
        {
            echo 
'    <priority>'.$item->priority.'</priority>
'
;
        }
        echo 
'  </url>
'
;
    }
    echo 
'
</urlset>
'
;
}


Помогите пожалуйста, я уже все руководства по DOM и созданию xml файла на php прочитала, но не могу понять - как, обращаясь к объектам в цикле (не массивам), как сделано на этой странице, совместить все это с записью в xml файл. В руководствах приведены примеры, когда в файл записываются данные например из массива (где они прописаны вручную), а у нас данные генерятся динамически по мере того как паук проходит по ссылкам сайта. Знания по xml слабые. Скрипт нужно сделать к сроку "еще вчера"




Спустя 5 часов, 44 минуты, 27 секунд (31.03.2009 - 20:39) kirik написал(а):
Думаю что так все будет работать:
Свернутый текст
PHP
<?php
$isearch_path 
dirname(__FILE__);
define('IN_ISEARCH'true);

require_once 
"$isearch_path/inc/core.inc.php";
require_once 
"$isearch_path/inc/search.inc.php";

isearch_open(True);

$result mysql_query("SELECT url, lastmod, changefreq, priority FROM $isearch_table_urls ORDER BY url"$isearch_ro_db);
if (!
$result)
{
    echo 
"<p>MySQL error : " mysql_error() . ' File: ' __FILE__ ', Line:' __LINE__ "</p>\n";
}
else if (
mysql_num_rows($result) > 0)
{

    if (
$isearch_config['char_set_8_bit'])
    {
        
$trans get_html_translation_table(HTML_ENTITIES);
    }
    else
    {
        
$trans get_html_translation_table(HTML_SPECIALCHARS);
    }
    
    
$result '<?xml version="1.0" encoding="UTF-8"?>

<!-- Powered by iSearch2                     -->
<!-- [url]http://www.iSearchTheNet.com/isearch[/url]    -->

<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
'
;
    while (
$item mysql_fetch_object($result))
    {
        
$result .= '
  <url>
    <loc>'
.strtr($item->url$trans).'</loc>
'
;
        if (
$item->lastmod 0)
        {
            
$result .= '    <lastmod>'.date('Y-m-d'$item->lastmod).'T'.date('H:i:s'$item->lastmod).'+00:00</lastmod>
'
;
        }
        if (
$item->changefreq != '')
        {
            
$result .= '    <changefreq>'.$item->changefreq.'</changefreq>
'
;
        }
        if (
$item->priority >= 0)
        {
            
$result .= '    <priority>'.$item->priority.'</priority>
'
;
        }
        
$result .= '  </url>
'
;
    }
    
$result .= '
</urlset>
'
;

    
file_put_contents('/file/to/sitemap.xml'$result); // после того как все строки собрали, пишем их в файл
    
unset($result);
}


если функция file_put_contents будет неопределена, значит у вас стоит старый php, и нужно будет тогда записывать в файл с помощью fopen-fwrite.

Удачи! smile.gif

Спустя 11 часов, 57 минут, 27 секунд (1.04.2009 - 08:37) Lenokk написал(а):
Цитата (kirik @ 31.03.2009 - 17:39)
Думаю что так все будет работать:


если функция file_put_contents будет неопределена, значит у вас стоит старый php, и нужно будет тогда записывать в файл с помощью fopen-fwrite.

Удачи! smile.gif

Спасибо за ответ, но меня интересует, как сделать так, чтобы в результате работы скрипта на выходе я получила бы xml файл, и меня интересуют подробности, т.к. я прочитала руководств 5 по DOM и XML, и ответа на вопрос, как записать подобный динамический скрипт, не нашла. В руководствах дан готовый массив ссылок и из него парсится. А у меня готовых ссылок нет, они генерятся когда поисковый паук проходит по сайту, динамически. Как сделать это через объекты я не знаю. Поэтому и обратилась на форум. Потому что не в состоянии сделать это сама. Мне не понятен сам принцип, от начала и до конца, я скопировала код из руководства, где было сказано как записать данные в xml файл, заменив их переменные (которые брались из массива в цикле, на цикл где переменные $item->url и подобные, но поскольку я в этом ничего не понимаю, то файл у меня не записывается естественно. Ни одна ссылка не записывается. В виде пхп файла "похожего" на xml мне на экран старый скрипт (то что я кинула сюда) выводится, а в нужный гуглю формат не записывает.

Спустя 2 дня, 5 часов, 34 минуты, 23 секунды (3.04.2009 - 14:11) Lenokk написал(а):
Цитата (Lenokk @ 1.04.2009 - 09:37)
Цитата (kirik @ 31.03.2009 - 17:39)
Думаю что так все будет работать:


если функция file_put_contents будет неопределена, значит у вас стоит старый php, и нужно будет тогда записывать в файл с помощью fopen-fwrite.

Удачи! smile.gif



Выдает ошибку:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in Q:\home\local\www\search\toxml.php on line 34

Спустя 5 часов, 50 минут, 2 секунды (3.04.2009 - 20:01) kirik написал(а):
Цитата (Lenokk @ 1.04.2009 - 00:37)
А у меня готовых ссылок нет, они генерятся когда поисковый паук проходит по сайту, динамически.

Вон оно как... Сайт динамический? Где хранится информация?

Спустя 2 дня, 12 часов, 25 минут, 36 секунд (6.04.2009 - 08:27) Lenokk написал(а):
Цитата (kirik @ 3.04.2009 - 21:01)
Цитата (Lenokk @ 1.04.2009 - 00:37)
А у меня готовых ссылок нет, они генерятся когда поисковый паук проходит по сайту, динамически.

Вон оно как... Сайт динамический? Где хранится информация?

Сайт на движке NetCat, все ссылки генерятся системой, все имеют расширение .html, и ни одной страницы в каталогах или подкаталогах не лежит. Вы можете объяснить что значит ошибка Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in Q:\home\local\www\search\toxml.php on line 34? Может быть она возникает оттого что php "не видит" mysql_fetch_object? Но на экран то содержимое сайта в виде xml файла с расширением php выводится! Но в файл не записывает.

Спустя 55 минут, 11 секунд (6.04.2009 - 09:22) kirik написал(а):
Цитата (Lenokk @ 6.04.2009 - 00:27)
Вы можете объяснить что значит ошибка

судя по ошибке - не корректно выполняется запрос к БД, тоесть $result не является валидным указателем на ресурс запроса.

Цитата (Lenokk @ 6.04.2009 - 00:27)
Но на экран то содержимое сайта в виде xml файла с расширением php выводится!

Что странно.. Тоесть если мы добавляем запись в файл, то выводится ошибка MySQL?

Спустя 5 часов, 57 минут, 28 секунд (6.04.2009 - 15:19) Lenokk написал(а):
Цитата (kirik @ 6.04.2009 - 10:22)
Цитата (Lenokk @ 6.04.2009 - 00:27)
Вы можете объяснить что значит ошибка

судя по ошибке - не корректно выполняется запрос к БД, тоесть $result не является валидным указателем на ресурс запроса.

Цитата (Lenokk @ 6.04.2009 - 00:27)
Но на экран то содержимое сайта в виде xml файла с расширением php выводится!

Что странно.. Тоесть если мы добавляем запись в файл, то выводится ошибка MySQL?

Да, вы правы. командой echo выводит на экран что-то, по коду похожее на xml google sitemap (на экране выглядит как набор строк с урлами). А вот при записи в файл - выдается mysql ошибка.

Спустя 9 дней, 19 часов, 26 минут, 6 секунд (16.04.2009 - 10:45) Guest написал(а):
Здраствуй! ты можешь помочь мне с php. Я вот не знаю как стобою связаться.. я ставлю тебе свою аську, ладНО? 280192375
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.