Зависает сервер при переборе записей вордпресс PHP

S
На сайте с 28.01.2016
Offline
44
504

Приветствую!

В общем решил сделать скрипт-генератор карты сайта, но при большом количестве страниц он выдает Allowed memory size of 641728512 bytes exhausted

Можно же как-то выудить только урл и дату? Или обрабатывать по 1 записи, а не все сразу брать из БД?

$fp = fopen ($_SERVER['DOCUMENT_ROOT'] .'/sitemap.xml', "w");

fwrite($fp, '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">');
$myposts = get_posts('numberposts=-1');
foreach($myposts as $post) :
$t1 = get_the_date('Y-m-d');
$t2 = get_the_date('G:i:s');
$u = get_permalink();
$i = "
<url>
<loc>".$u."</loc>
<lastmod>".$t1."T".$t2.":00+00:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>";
fwrite($fp, $i);
endforeach;
fwrite($fp, '
</urlset>');
fclose($fp);
DV
На сайте с 01.05.2010
Offline
644
#1

Можно получать записи не через API, а напрямую из базы.

А там уже SQL запросом нужные столбцы выдернуть.

К тому же, такой "хардкодный" метод сам по себе намного меньше будет жрать памяти.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
[umka]
На сайте с 25.05.2008
Offline
456
#2

Переполнение, видимо, вызывает функция "get_posts" (об этом должно быть написано в сообщении об ошибке).

А правильное решение вы сами определили:

seovisor:
Или обрабатывать по 1 записи, а не все сразу брать из БД?
Лог в помощь!
N
На сайте с 01.12.2006
Offline
102
#3

Как правило карта сайта генерится раз в сутки по крону, где-нибудь ночью. Если есть возможность управления сервером, то увеличте выделяемую память, возможно Вам хватит для генерации.

S
На сайте с 28.01.2016
Offline
44
#4
DenisVS:
Можно получать записи не через API, а напрямую из базы.
А там уже SQL запросом нужные столбцы выдернуть.
К тому же, такой "хардкодный" метод сам по себе намного меньше будет жрать памяти.

Да точно! Я просто привык что в базу ВП напрямую лучше не лезть, но здесь чтение поэтому можно)

---------- Добавлено 16.11.2017 в 10:15 ----------

'[umka:
;15339488']Переполнение, видимо, вызывает функция "get_posts" (об этом должно быть написано в сообщении об ошибке).
А правильное решение вы сами определили:

А какая функция по 1 записи дергает? И чтобы все подряд перебирала.

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