Почему мое первое значение в reset () равно нулю?

0

У меня есть сервер с каталогом, полным книг. Я написал сценарий, который проходит через этот каталог и перечисляет весь PDF файл, который находится внутри. Затем я сделал еще один шаг и начал искать книги Google и возвращать изображение и описание этих книг. Для некоторых книг это работает отлично, но для большого числа из них я получаю эту ошибку...

Предупреждение: reset() ожидает, что параметр 1 будет массивом, null указан в bookDescriber.php в строке 49

Это код, который дает эту ошибку (все это находится внутри большого файла foreach, в котором перечислены все файлы PDF в каталоге). последняя строка этого кода - строка 49.

//search GoogleBooks for a description
    $item = file_get_contents("https://www.googleapis.com/books/v1/volumes?q=$v&maxResults=1");
    $item = json_decode($item);
    $item = reset($item->items);

$ v в приведенном выше URL-адресе - это просто имя файла книги, поэтому это одна из ссылок, которые он будет генерировать, и, как вы можете видеть, это возвращает информацию... (если вы скопируете всю ссылку до maxResults = 1, тогда данные возвращаются, может быть, иногда места в URL-адресе не имеют значения, а иногда они и есть? Я потерян)

https://www.googleapis.com/books/v1/volumes?q=Ajax окончательное руководство.pdf & maxResults = 1

так почему первый параметр в моем сбросе() установлен в null? Помоги пожалуйста!!

  • 0
    Попробуйте var_dump($item) и var_dump($item->items) и покажите вывод. И для пробелов, почему бы вам не попробовать заменить их на + заранее?
Теги:
reset
pdf

1 ответ

0

Я тестировал этот фрагмент и его можно воссоздать, если:

  • $ v пуст
  • Книга не существует

Если книга не существует, выбрасывается нулевая ошибка, и Google возвращает:

{
"kind": "books#volumes",
"totalItems": 0
}

Это недостаточно для создания массива. Вам лучше проверить чек:

<?php
$item = file_get_contents("https://www.googleapis.com/books/v1/volumes?q=$v&maxResults=1");

if(is_array($item))
{
   $item = json_decode($item);
   $item = reset($item->items);
}
else
{
   return false; // echo 'no book';
}
?> 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню