Задать вопрос
@buryakov_dima

Почему cUrl не работает в цикле?

Здравствуйте, прошу помощи с решением одной, небольшой проблемки с циклом и cUrl. Имеется следующий код:
public function getAllMessage($offset = 0)
    {
        $groupCounter = 0;
        foreach ($this->groupArray as $currentGroup)
        {
            $groupCounter++;

           $apiUrl = "https://api.vk.com/method/wall.get?owner_id=-". $currentGroup ."&count=1";

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $apiUrl);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);

            $apiResponse = curl_exec($ch);
            $outputArray[$groupCounter] = json_decode($apiResponse, true);

            curl_close($ch);
        }
        print_r($outputArray);
    }


Проблема заключается в том, что URL для cUrl передаются в цикле foreach (также пробовал обычный for), например если на вход подать массив с URL состоящий из 3х элементов, то по логике на выходе должен получится массив который будет содержать в себе 3 ответа от сервера VK, но на деле получается так, что первые 2 элемента массива вообще пустые, а вот как раз в последнем есть ответ от сервера ВК (и этот ответ приходит от третьего, последнего элемента входного массива т.е последней ссылки). Что не так? Почему не работает, прошу помощи!

p.s все URL валидные (проверенно)
  • Вопрос задан
  • 729 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
timeout побольше, проверить значения $this->groupArray на валидность, лучше всего делать принудительное объявление $outputArray - $outputArray = array();
Ответ написан
Adamos
@Adamos
curl возвращает false в случае ошибки.
json_decode от него делать бесполезно.
И если аргумент в неправильной кодировке, декодирован он тоже будет в пустоту.

Ну, и использование $groupCounter демонстрирует, что это, похоже, ваш первый РНР-скрипт ;)
Ответ написан
Комментировать
@Nc_Soft
В вк есть ограничения на частоту запросов к апи, это 3 раза в секунду (в самом низу написано)
https://vk.com/dev/api_requests
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы