Как поместить два get запроса в одну функцию с ожиданием разных ответов?
Так всё легко начиналось, а сейчас я уже не хочу помещать два GET запроса в одну функцию, но теперь у меня уже дело принципа. Если бы я знала, что я просижу над этой строчкой 6 часов - я бы сразу плюнула и сделала две отдельные функции.
Есть GET запрос сервер. Точнее их два: первый запрос возвращает ID, второй запрос по полученному ID возвращает данные. Проблема в том, что результаты запросов имеют несколько видов: у первого запроса: id и error (если id не получен) у второго запроса: 0 - (ошибка), 1 - (успешно), 2 - (данные подготавливаются, сделайте запрос позже)
function curl($method, $request) {
$a = 1;
do {
echo "---запуск---";
$ch = curl_init("https://server/$method/$request");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = json_decode(curl_exec($ch));
print_r($result);
$status = $result->status;
$id = $result->id;
if ($a > 3) break 1; // если более трёх запросов, то останавливаем цикл
sleep(3); $a = $a+1;
}while ($method == "result" ? $status != 1 : !$id);
curl_close($ch);
return $result;
}
echo "Первый запуск";
$resultCurl = curl("first", $data);
echo "Второй запуск";
$resultCurl2 = curl("second" $resultCurl->id);
Вся проблема в строчке:
}while ($method == "first" ? !$id : $status != 1);
Мне нужно, чтобы в первом запросе цикл повторялся, пока я не получу id, а во втором случае: пока Status не будет равен 1...
Как блин такое сделать?
Я специально делаю ошибку, чтобы результат не смог обработаться, но почему-то я вижу:
Первый запуск
---запуск---
---запуск---
---запуск---
---запуск---
Второй запуск
---запуск---
Хотя я должна после второго запуска видеть снова 4 раза "---запуск---"
Ответы (1 шт):
Вся проблема в строчке:
}while ($method == "first" ? !$id : $status != 1);
Думаю, эта строчка может выглядеть примерно так.
}while (($method == "first" && !isset($result->id)) || ($method == "second" && !$result->status));
А вообще странная конструкция кода, например цикл do{....}while не помню чтобы где-то применялся в php. Вариант приведенный ниже мне более понятен
<?php
function curl($method, $request) {
$a = 0;
while ($a++ < 4) {
echo "---method-$method---<br>";
$ch = curl_init("https://server/$method/$request");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = json_decode(curl_exec($ch));
if ($method == 'first' && isset($result->id)) {//если id существует, то функция вызывает сама себя с другим параметром
return curl('second', $result->id);
}
if ($method == 'second' && $result->status) {//если status не равен 0, возвращаем результат
return $result;
}
sleep(3);
}
return false;//если исчерпаны все попытки возвращаем false
}
if ($result = curl('first', $data)) {
var_dump($result);
}
else {
echo 'Попытки исчерпаны';
}