Проблема с синтаксическим анализом JSON php

#php #json

#php #json

Вопрос:

Я пытаюсь перебрать список URL-адресов, содержащих json, чтобы извлечь и сохранить данные на потом. Ниже приведен код, который я пытаюсь запустить на компьютере с Windows php, когда я запускаю его на Mac, он работает просто отлично, но при запуске на Windows я получаю приведенную ниже ошибку

Обратите внимание: попытка получить свойство ‘included’ не-объекта в D:sstkjson.php в строке 23 получено уведомление PHP о данных: попытка получить свойство ‘included’ не-объекта в D:sstkjson.php в строке 23

 <?php

$urllist = file("https://gist.githubusercontent.com/blah/gistfile1.txt");
$newids = [];

foreach ($urllist as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, trim($url));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    $response = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
    $json = json_decode($response);

    if ($curl_errno > 0) {
        echo "cURL Error ($curl_errno): $curl_errorn";
    } else {
        echo "Data receivedn";
    }

    if($json->included) {
        foreach ($json->included as $id) {
            $newids[] = $id->id;
        }
    }

    file_put_contents("ids.txt", implode(PHP_EOL,$newids));
}

?>
  

Комментарии:

1. json_decode() по какой-то причине происходит сбой.

2. gist.githubusercontent.com/blah/gistfile1.txt этот URL-адрес не найден, можете ли вы поделиться URL-адресом, чтобы я мог отладить проблему

3. Попробуйте var_dump($response) посмотреть, что вы получаете.

4.Вы должны проверить, $curl_errno прежде чем пытаться использовать $response .

5. Вот ссылка на фактический файл link

Ответ №1:

Я думаю, что ваш запрос не получает никакого ответа, поэтому проблема возникает, чтобы предотвратить уведомление, вы можете написать код, подобный приведенному ниже.

 <?php

$urllist = file("https://gist.githubusercontent.com/blah/gistfile1.txt");
$newids = [];

foreach ($urllist as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, trim($url));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    $response = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
    $json = json_decode($response);

    if ($curl_errno > 0) {
        echo "cURL Error ($curl_errno): $curl_errorn";
    } else {
        echo "Data receivedn";

         if(!empty($json) amp;amp; !empty($json->included)) {
              foreach ($json->included as $id) {
                   $newids[] = $id->id;
              }
         }

         file_put_contents("ids.txt", implode(PHP_EOL,$newids));

    }

}
  

?>

Комментарии:

1. Это не выдает ошибку, но сейчас не возвращает никаких данных.. вот ссылка на правильный текстовый файл link

2. @johncsmith427 этот пример отлично работает у меня в Windows… Я думаю, что Shutterstock заблокировал ваш ip, поэтому он не возвращает никаких данных

3. @johncsmith427 вы можете использовать прокси в Windows для получения данных, а также поддерживать некоторое время с 2 запросов, используя функцию sleep.