/208.include.cache.php : 20) PHP warning: Invalid argument supplied for foreach()

Доброго дня. В журнал получаю ошибки
/208.include.cache.php : 20) PHP warning: Invalid argument supplied for foreach()
сниппет с id 208 тянет фотки с яндекс диска

<?php
$newpath = str_replace("https://disk.yandex.ru/client/disk", "", "$input");
$path = $newpath;
$fields = '_embedded.items.preview,_embedded.items.name';


$headers = array("Authorization: OAuth " . $modx->getOption('yandexdiskuploader_access_token'), "Content-Type: application/json");
$ch = curl_init('https://cloud-api.yandex.net:443/v1/disk/public/resources?public_key=...' . urlencode($path) . '&fields=' . $fields);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);

$res = json_decode($res, true);
foreach ($res as $emb) {
      foreach ($emb as $item) {
            foreach ($item as $names) {
                foreach ($names as $k => $v) {
                if ($k == 'preview'){
                 echo '<div class="p-1 img-userload-w"><img src=' . $v . ' class="img-userload rounded"></div>';
                }
             }
         }
      }
}
фотки отображаются, вроде бы всё работает, но загрузка страницы в разы увеличивается, явно из-за этих ошибок. Что-то связанно с json_decode?
vrm13
05 июля 2019, 11:16
modx.pro
943
0
Поблагодарить автора Отправить деньги

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

gruzoveek
05 июля 2019, 12:18
+1
видимо структура $res не так проста чтобы делать вложенные циклы foreach без проверки на тип переменной. Попробуйте вставить логирование в начале каждого цикла, чтоб увидеть который цикл падает и с какими аргументами.
    vrm13
    05 июля 2019, 12:59
    0
    Массив $res
    Array
    (
        [_embedded] => Array
            (
                [items] => Array
                    (
                        [0] => Array
                            (
                                [preview] => ...
                                [name] => IMG_20190630_153913-742af.jpg
                            )
    
                        [1] => Array
                            (
                                [preview] => ...
                                [name] => IMG_20190704_162123-23458.jpg
                            )
    
                    )
    
                [public_key] => ...
            )
    
    )
    gruzoveek
    05 июля 2019, 13:13
    +1
    ну вот этот public_key на уровне items похоже все и портит. лучше берите сразу цикл по $res['_embedded']['items'], незачем плодить столько вложенных циклов
      vrm13
      05 июля 2019, 13:23
      0
      Да, действительно! Огромное спасибо

      $res = json_decode($res, true);
      foreach ($res['_embedded']['items'] as $names) {
          foreach ($names as $k => $v) {
              if ($k == 'preview'){
               echo '<div class="p-1 img-userload-w"><img src=' . $v . ' class="img-userload rounded"></div>';
              }
          }
      }
      так без ошибок. Правда время загрузки не сократилось, видимо это уже из-за запросов к яндекс диску
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4