/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?
Поблагодарить автора
Отправить деньги
Комментарии: 4
видимо структура $res не так проста чтобы делать вложенные циклы foreach без проверки на тип переменной. Попробуйте вставить логирование в начале каждого цикла, чтоб увидеть который цикл падает и с какими аргументами.
Массив $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] => ...
)
)
ну вот этот public_key на уровне items похоже все и портит. лучше берите сразу цикл по $res['_embedded']['items'], незачем плодить столько вложенных циклов
Да, действительно! Огромное спасибо
$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>';
}
}
}
так без ошибок. Правда время загрузки не сократилось, видимо это уже из-за запросов к яндекс диску
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.