Я пытаюсь перечислить текущую цену доллара США для позиции в mBTC (millibitcoin) с использованием API Coinbase. Вот мой код:
<?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
по какой-то причине не задаются. Есть ли способ заставить это работать?
Вы делаете несколько (крайне ошибочных) предположений в следующих строках:
$whole = substr($price/$spot, 4, -13);
$dec = substr($price/$spot, 4, -12);
$price/$spot
рассматривается как строка, и вы предполагаете, что оно будет в формате
'0.0019XXXXXXXXXXXX' // 12 x (unkown numbers)
Что делать, если биткойн делает действительно плохо, и скорость превышает 10 мБТС на доллар США? $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-битный, ваш сервер 32bit или наоборот!), Длина строки $price/$spot
менее 18 символов:
'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'
Короче говоря: никогда не рассматривайте числа как строку (если у вас нет других вариантов, и вы полностью осознаете, что делаете). Следующий код будет работать и даст правильный результат:
echo number_format($price / $spot * 1000, 1);
// multiply by 1000: BTC to milli-BTC
// , 1: One digit after the dot
Полное описание number_format: http://php.net/number_format
Я просто выполнил точный код на моем сервере WAMP на окнах... Казалось, что он отлично работает!
OUTPUT: 1.19 mBTC
Это то, что вы ожидаете????
Я думаю, что ваш сервер не может получить доступ к веб-страницам, поэтому ваши переменные php-кода будут вакантными... попробуйте XAMP и проверьте...
Благодаря....
$spot
.
вы не можете обходить данные с https://coinbase.com/api/v1/prices/spot_rate
поэтому строка $ пуста! 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';
}
$spot
без конфликтов. Оно работает. Просто по какой-то причине $whole
и $dec
не отображаются.
$spot
и это даст мне полную стоимость. По-прежнему кажется, что переменные$whole
и$dec
как-то портятся на этом сервере. Я только что попытался использовать тот же скрипт на другом сервере и работает точно так же, как в Coderunner, без каких-либо изменений.