Функция 'file_get_contents' с нескольких URL-адресов и предупреждением о превышении лимита перенаправления - PullRequest
0 голосов
/ 26 декабря 2018

Мне нужно разобрать JSON с нескольких URL.Вот способ, которым я следую:

<?php
//call
$url1 = file_get_contents("https://www.url1.com");
$url2 = file_get_contents("https://www.url2.com");
$url3 = file_get_contents("https://www.url3.com");
$url4 = file_get_contents("https://www.url4.com");
$url5 = file_get_contents("https://www.url5.com");
//parse
$decode1 = json_decode($url1, true);
$decode2 = json_decode($url2, true);
$decode3 = json_decode($url3, true);
$decode4 = json_decode($url4, true);
$decode5 = json_decode($url5, true);

//echo 
if (is_array($decode1)) {
                foreach ($decode1 as $key => $value) {
                    if (is_array($value) && isset($value['price'])) {
                        $price = $value['price'];
                        echo '<span><b>' . $price . '</b><span>';
                    }
                }
            }
?>

Этот способ вызывает медлительность при открытии страниц.С другой стороны, я получаю следующие ошибки:

Предупреждение: file_get_contents (https://www.url1.com): не удалось открыть поток: достигнут предел перенаправления, прерывание в /home/directory/public_html/file.phpв строке 12

Предупреждение: file_get_contents (https://www.url2.com): не удалось открыть поток: достигнут предел перенаправления, прерывание в /home/directory/public_html/file.php в строке 13

и т. д..

Как исправить предупреждение redirection limit reached?

1 Ответ

0 голосов
/ 26 декабря 2018

Я бы предложил использовать cURL для извлечения удаленных данных.Вы можете сделать это:

$urls = [
    "https://www.url1.com",
    "https://www.url2.com",
    "https://www.url3.com",
    "https://www.url4.com",
    "https://www.url5.com"
  ];
$decoded = array_map("loadJSON", $urls);

if (is_array($decoded[0])) {
  foreach ($decoded[0] as $key => $value) {
    if (is_array($value) && isset($value['price'])) {
      $price = $value['price'];
      echo '<span><b>' . $price . '</b><span>';
    }
  }
}

/**
 * Downloads a JSON file from a URL and returns its decoded content
 */
function loadJSON($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // If your server does not have SSL
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Follow redirections
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // 10 max redirections
  $content = curl_exec($ch);
  curl_close($ch);
  $res = json_decode($content, true);
  return $res;
}
...