我正在尝试使用Coinbase API列出mBTC(millibitcoin)中商品的当前美元价格。这是我的代码:
<?php
$string = file_get_contents('https://coinbase.com/api/v1/prices/spot_rate');
$result = json_decode($string);
$spot = $result->amount;
$price = 2; //change this to your USD value
$whole = substr($price/$spot, 4, -13);
$dec = substr($price/$spot, 4, -12);
echo $whole.'.'.$dec.' mBTC';
?>
它在Coderunner(用于开发的OS X应用程序)中完美运行但在我的托管服务器上运行时失败。链接到浏览器脚本:http://bitcoindecals.com/oval-price.php
我正在使用Dynadot Advanced托管,它包括PHP支持。我知道正在使用PHP,因为“mBTC”正在被正确回显。由于某种原因,似乎没有设置$whole
和$dec
变量。有没有办法让这个工作?
答案 0 :(得分:1)
您在以下几行中做了一些(极端错误的)假设:
$whole = substr($price/$spot, 4, -13);
$dec = substr($price/$spot, 4, -12);
$price / $spot
被视为字符串,您认为它的格式为
'0.0019XXXXXXXXXXXX' // 12 x's (unkown numbers)
如果比特币做得非常糟糕并且每美元的利率为10 mBTC怎么办? $price / $spot
将类似于:
'0.0108491827849201'; // (10.8 mBTC)
$whole = substr('0.0108491827849201', 4, -13); // Will be '0'
$dec = substr('0.0108491827849201', 4, -12); // Will be '08'
echo $whole . '.' . $dec . ' mBTC'; // Will echo '0.08 mBTC'
如果由于舍入或准确性(!这是你在服务器中看到的 - 很可能是因为你的OSX是64位,你的服务器是32位,反之亦然!),字符串长度为{{1少于18个字符:
$price / $spot
长话短说:永远不要将数字视为字符串(除非你没有其他选择,而且你完全了解你在做什么)。以下代码将起作用,并将提供正确的输出:
'0.0019564521431';
$whole = substr('0.0019564521431', 4, -13);
// Meaning: start at position 4, stop at 13 characters counting from the end
// 13 characters from the end is here: '0.0019564521431'
// ^
// so the stop-position is before the start-position, resulting in an empty
// string. Same with $dec.
echo $whole . '.' . $dec . ' mBTC';
// Will echo empty-string . '.' . empty-string . ' mBTC': '. mBTC'
有关number_format的完整说明,请参阅:http://php.net/number_format
答案 1 :(得分:0)
您无法从https://coinbase.com/api/v1/prices/spot_rate抓取数据
所以$ string是空的!
do {
$string = file_get_contents('https://coinbase.com/api/v1/prices/spot_rate');
} while (!empty($string));
$result = json_decode($string);
$spot = $result->amount;
$price = 2; //change this to your USD value
if (isset($spot) or $spot == 0) {
echo "\$spot is not islet or 0";
} else {
$whole = substr($price/$spot, 4, -13);
$dec = substr($price/$spot, 4, -12);
echo $whole.'.'.$dec.' mBTC';
}
答案 2 :(得分:0)
我刚刚在Windows上的WAMP服务器中执行了确切的代码.... 它看起来非常顺利!
输出:1.19 mBTC
这是你期望的吗?
我认为您的服务器无法访问网页,因此,您的PHP代码变量将空置...尝试XAMP并检查....
...谢谢