#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.