Я хотел бы создать процесс получения данных RSS с помощью PHP, MySQL, SimpleP ie и jQuery, однако я сталкиваюсь с проблемами из-за сбоя браузера, ограниченной памяти сервера и ошибки 500 при попытке для извлечения и обработки большого количества данных из внешних источников.
Есть ли способ использовать jQuery (или другой способ) для «замедления» и «сегментирования» этапов поиска и обработки данных, т.е. jQuery «разделение» или «управление» PHP выводит результаты на куски и вынуждает PHP обрабатывать только следующий оставшийся блок извлечения данных после завершения первого, так что PHP успевает очистить серверной памяти между?
В основном мой процесс выглядит следующим образом:
- получение источника xml каналов из базы данных (MySQLi WHILE l oop)
- Инициировать simplep ie rss
- FOREACH, получить последние rss-элементы (заголовок, содержимое, изображение, дату и т. д. c)
- FOREACH rss-элемент, проверить наличие изображений в элементе rss-содержимого
- FOREACH rss item, ch eck внешний источник html для получения дополнительных изображений (через file_get_contents)
- проверка, существуют ли изображения на самом деле (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, чтобы сервер не был перегружен?