Замедляйте извлечение данных, чтобы сохранить память и избежать использования браузера cra sh (PHP & SimpleP ie) - PullRequest
0 голосов
/ 28 апреля 2020

Я хотел бы создать процесс получения данных RSS с помощью PHP, MySQL, SimpleP ie и jQuery, однако я сталкиваюсь с проблемами из-за сбоя браузера, ограниченной памяти сервера и ошибки 500 при попытке для извлечения и обработки большого количества данных из внешних источников.

Есть ли способ использовать jQuery (или другой способ) для «замедления» и «сегментирования» этапов поиска и обработки данных, т.е. jQuery «разделение» или «управление» PHP выводит результаты на куски и вынуждает PHP обрабатывать только следующий оставшийся блок извлечения данных после завершения первого, так что PHP успевает очистить серверной памяти между?

В основном мой процесс выглядит следующим образом:

  1. получение источника xml каналов из базы данных (MySQLi WHILE l oop)
  2. Инициировать simplep ie rss
  3. FOREACH, получить последние rss-элементы (заголовок, содержимое, изображение, дату и т. д. c)
  4. FOREACH rss-элемент, проверить наличие изображений в элементе rss-содержимого
  5. FOREACH rss item, ch eck внешний источник html для получения дополнительных изображений (через file_get_contents)
  6. проверка, существуют ли изображения на самом деле (getimagesize, get_headers)

Поскольку в MySQLi WHILE у меня много циклов FOREACH Я oop сама, вся операция занимает очень много времени и занимает много памяти.

Пример кода:

$sql = "SELECT * FROM sources ORDER BY id DESC";
$query = mysqli_query($connection, $sql) or die (mysqli_error());
while ($row = mysqli_fetch_array($query)) {
$feed_url = $row["feed_url"];

  $feed = new SimplePie();
  $feed->set_feed_url($feed_url);
  $feed->enable_cache(false);
  $feed->init();
  $feed->handle_content_type();

    foreach ($feed->get_items(0, 20) as $item){
    $link = $item->get_permalink();

    $homepage = file_get_contents($link);
    $doc = new DOMDocument();
    libxml_use_internal_errors(true);
    $doc->loadHTML($homepage);
    libxml_clear_errors();

    $tags = $doc->getElementsByTagName('img');
    foreach ($tags as $tag) {
       $image_url = $tag->getAttribute('src');
       // process image further or return image here
    } // end foreach tag

    $tags = $doc->getElementsByTagName('a');
    foreach ($tags as $tag) {
       $image_url = $tag->getAttribute('href');
       // process image further or return image here
    } // end foreach tag

    ... more foreach loops here

  } // end foreach rss item

} // end mysqli while

Есть ли способ использовать jQuery для возврата данных обратно AJAX во всех циклах FOREACH и «контролировать» оставшиеся циклы PHP, чтобы сервер не был перегружен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...