api没有响应时处理

时间:2018-10-29 14:49:01

标签: php json laravel api currency

我正在尝试获取欧元,美元和土耳其里拉货币并进行比较。但有时api(我正在使用随机货币网站json值)无法响应。 无法获得任何值,页面加载30秒,执行时间完成后,出现错误。 我想做的是:如果它在1秒钟(或更少)内无法从api中获取任何值,则返回null。我怎样才能做到这一点。如果有人可以帮忙,我会很高兴的。这是我的php代码。我试图在其他情况下使用它,但无法正常工作。

ps:我为此使用了一个ajax代码,当值更改时它会刷新。这在大多数时候都有效。但是一天中有2-3次会引发错误。

$json_eur = file_get_contents('https://doviz.com/api/v1/currencies/EUR/latest');
$val_eur = json_decode($json_eur, true);

echo $val_eur['selling'];

编辑

这是解决方法。在JRoss答案中添加了一些代码。

$ctx_dollar = stream_context_create(array(
    'http' => array(
        'timeout' => 1
    )
)
);
$usd_url = 'https://doviz.com/api/v1/currencies/USD/latest';

if (@file_get_contents($usd_url)):
    $json_usd = file_get_contents($usd_url, 0, $ctx_dollar);
    $val_usd = json_decode($json_usd, true);
    if (is_numeric($val_usd['selling'])) {
        echo $val_usd['selling'];
    }
    else {
        echo "loading...";
    }
endif;

1 个答案:

答案 0 :(得分:2)

$ctx = stream_context_create(array( 
    'http' => array( 
        'timeout' => 1 
        ) 
    ) 
); 
file_get_contents("https://doviz.com/api/v1/currencies/EUR/latest", 0, $ctx); 

http://php.net/file_get_contents

最重要的是,我会捕获异常。 try {} catch (Exception $e) {}