Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите разбить карту сайта на части

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DemonXT
Отправлено: 15 Июля, 2010 - 01:45:17
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




xml карта моего сайта разраслась на столько, что google её уже не принимает!
Помогите разбить его на части, но чтобы не нарушилась структура xml-файла.
Нашёл и немного модифицировал скрипт, который просто делит файл на части:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.   // Имя файла
  3.   $filename = "sitemap.xml";
  4.   // Разбиваем файл на куски по 4Мб.
  5.   // За одно и запишем их в разные файлы
  6.   $piece = 4718592;
  7.   // Открываем исходный файл
  8.   $fp = fopen($filename, "r");
  9.   // Читаем содержимое файла в буфер
  10.   $bufer = fread($fp, filesize($filename));
  11.   // Закрываем файл
  12.   fclose($fp);
  13.   // Подсчитываем число кусков, на которые
  14.   // разобьётся файл
  15.   $count = (int)filesize($filename)/$piece;
  16.   if((float)(filesize($filename)/$piece) - $count != 0) $count++;
  17.   // В цикле разбиваем содержимое файла в переменной
  18.   // $bufer на части
  19.   for($i=0; $i<$count; ++$i)
  20.   {
  21.     $part = substr($bufer,$i*$piece,$piece);
  22.     $fname = "sitemap".$i;
  23.     $fname = $fname.".xml";
  24.     // Сохраняем кусок в файле
  25.     $fp = fopen($fname,"w");
  26.     fwrite($fp,$part);
  27.     fclose($fp);
  28.   }
  29. ?>

Но он просто делит файл на части равные заданное количество байт.
Файл sitemap.xml имеет вид:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  4.         <url>
  5.                 <loc>http://site.ru/google.html</loc>
  6.                 <lastmod>2010-07-15</lastmod>
  7.                 <priority>0.5</priority>
  8.         </url>
  9.         <url>
  10.                 <loc>http://site.ru/reklama.html</loc>
  11.                 <lastmod>2010-07-15</lastmod>
  12.                 <priority>0.5</priority>
  13.         </url>
  14.         <url>
  15.                 <loc>http://site.ru/rules_news.html</loc>
  16.                 <lastmod>2010-07-15</lastmod>
  17.                 <priority>0.5</priority>
  18.         </url>
  19.  
  20. ...
  21.  
  22.         <url>
  23.                 <loc>http://site.ru/soft/</loc>
  24.                 <lastmod>2010-07-15</lastmod>
  25.                 <priority>0.7</priority>
  26.         </url>
  27. </urlset>
  28.  

То есть в первой части нужно откусить по строку: " </url>" и в конец вставить строку: "</urlset>", а в начало следующего вставить шапку:
CODE (html):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

Очень нужна Ваша помощь. Заранее спасибо.
 
 Top
ZeiZ
Отправлено: 15 Июля, 2010 - 03:37:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. // Разбиваем файл на куски по 4Мб.
  2. $piece = 4718592;
- ?????
Я чего-то не понимаю???
1024(1кб)*1024=1048576(1мб)*4=4194304 Не понял


Логика такая:
1)берём файл, регуляркой разбиваем его в массив содержащий

CODE (html):
скопировать код в буфер обмена
  1. <url>
  2.                 что-то там
  3.         </url>


n-ое количество элементов.

Создаём файл №1.
Записываем туда шапку
CODE (html):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">


Потом первые n (20970) элементов.

Добавляем низ

Создаём следующий файл и т.д.

Математика:
CODE (html):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  3. </urlset>

в UTF-8 - 113байт. (округлим до 120)

CODE (html):
скопировать код в буфер обмена
  1.         <url>
  2.                 <loc>http://site.ru/reklama.html</loc>
  3.                 <lastmod>2010-07-15</lastmod>
  4.                 <priority>0.5</priority>
  5.         </url>
- 174байта (округлим до 200, если линки очень длинные, то и до 300-400 можно Радость )

4194304-120=4194184/200=20970 элементов

по поводу регулярки помочь не смогу... Не очень силен... И мозг уже не работает (4:37) Радость
 
 Top
DemonXT
Отправлено: 15 Июля, 2010 - 08:12:25
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




ZeiZ пишет:
- ?????
Я чего-то не понимаю???
1024(1кб)*1024=1048576(1мб)*4=4194304 Не понял

Я просто размер создаваемого файла увеличил до 4.5 Мб., а в комментарии осталось 4Мб. Но думаю - это не так важно. Не понял и опечален
Суть понятно, но мне желательно готовое решение или хотя бы частями. Я в php не силён. Поэтому и пишу в соответствующем разделе.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB