Я отправляю запрос на завивки на сервер, который требует нескольких секунд, чтобы обработать запрос и выплюнуть ответ. Я считаю, что мой php-скрипт продолжается и не ждет, поэтому мой цикл foreach, основанный на ответе, выплевывает 0 результатов. Как я могу дождаться завершения транзакции curl перед перемещением и обработкой данных?
$curl = curl_init(); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($curl, CURLOPT_USERPWD, "admin:password"); curl_setopt($curl, CURLOPT_URL, "http://server/r/?dst_user__substr='user'"); curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $ret = curl_exec($curl); $result = json_decode($ret,true); <<<<I need to wait until transaction is complete here>>>> foreach ($result['data'] as $key => $value) { //process data from $result }
завиток блокируется, что означает, что:
$result = json_decode($ret,true); foreach ($result['data'] as $key => $value) { //process data from $result }
не будет выполняться до:
$ret = curl_exec($curl);
завершено. Вы можете проверить ошибки и другие проблемы с помощью curl_error () и проверить код ответа HTTP с помощью curl_getinfo ().
Это действительно странно! , это не должно происходить, как то, что вы получаете. Но в любом случае попробуйте вот так.
Получите код httpresponse, а затем проверьте …
$curl = curl_init(); curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($curl, CURLOPT_USERPWD, "admin:password"); curl_setopt($curl, CURLOPT_URL, "http://server/r/?dst_user__substr='user'"); curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $ret = curl_exec($curl); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if($httpcode==200) { $result = json_decode($ret,true); foreach ($result['data'] as $key => $value) { //process data from $result } }