file_get_contents синхронный или асинхронный

Сегодня я столкнулся с одной ситуацией.

Я использую file_get_contents для получения токена из файла для пользователя.

 $data=file_get_contents("http://example.com/aaa.php?user=tester&akey=abcdef1234"); $dec=json_decode($data,true); $tokenid=$dec['message']['result']['tokenid']; 

Используя токен, я вызову другой файл, чтобы получить детали;

 $data=file_get_contents("http://example.com/bbb.php?user=tester&token=".$tokenid); 

проблема иногда я не получаю tokenid, после обновления страницы я ее получаю.

В aaa.php нет никаких проблем с работой.

Я сомневаюсь, что php не ждет ответа file_get_contents token перед тем, как перейти ко второму file_get_contents(asynchronous);

Я тоже пробовал с завитом, но иногда я не получаю токенид. Я не сталкивался с такими проблемами.

Определенно не вопрос синхронного и асинхронного. Но так как отладка довольно невозможна. Попробуйте что-то вроде этого. Операторы die являются уродливыми, но иллюстрируют проверку, которую вы можете захотеть включить …

 $data = file_get_contents("http://example.com/aaa.php?user=tester&akey=abcdef1234"); if (empty($data)) die('Failed to fetch data'); $dec = json_decode($data, true); if (is_null($dec) || $dec === false) die('Failed to decode data'); $tokenid = isset($dec['message']['result']['tokenid']) ? $dec['message']['result']['tokenid'] : null; if (is_null($tokenid) die('Token ID is not set'); //... $data=file_get_contents("http://example.com/bbb.php?user=tester&token=".$tokenid); 

Возможно, ваш токен иногда содержит специальные символы, которые нужно избегать.

file_get_contents является синхронным. Иногда вы можете получить FALSE из-за разных причин, таких как отказ сети, отказ DNS и т. Д.

Вместо этого используйте curl: он быстрее и настраивается. Вы можете дождаться хорошей рекурсивной реакции, если вам нужен 100-процентный успех.