今天我遇到一种情况。
我正在使用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
之前是否不等待令牌file_get_contents(asynchronous);
的响应
我也尝试过curl,但是有时我没有得到tokenid。我还没有遇到过这类问题。
绝对不是同步与异步的问题。但是调试几乎是不可能的。尝试这样的事情。 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
是同步的。有时由于诸如网络故障,DNS故障等各种原因,您可能会得到FALSE
。
使用curl代替:它是faster,并且更可定制。如果您需要100%成功,则可以单击wait for good response recursive。
等待file_get_contents的最佳方法,希望对您有所帮助。
if ($result = file_get_contents("http://exemple.com", false)) {
echo $result; // for exemple
}