Сегодня я столкнулся с одной ситуацией.
Я использую 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-процентный успех.