为什么我的函数发送多个cURL请求失败?

时间:2014-09-04 19:58:19

标签: php curl

我有这个函数,historicalBootstrap,我想用它将三个不同的数据集放入页面中:

$years = array(
        date('Y-m-d', strtotime('1 year ago')). ".json",
        date('Y-m-d', strtotime('2 years ago')). ".json",
        date('Y-m-d', strtotime('3 years ago')). ".json"    
    );

function historicalBootstrap($years, $id){

    for($i = 0; $i < 3; $i++){

        $date = $years[$i]; 

        $i = curl_init("http://openexchangerates.org/api/historical/{$date}?app_id={$id}");
        curl_setopt($i, CURLOPT_RETURNTRANSFER, 1);

        $jsonHistoricalRates = curl_exec($i);
        curl_close($i);

        $i = json_decode($jsonHistoricalRates);
        echo '<script>_'. $i . 'historical = '. json_encode($historicalRates) . ' ; ' . '</script>';

    }   
}

historicalBootstrap($years, $appId);

我似乎可以使用这种方法发出一个请求,例如在功能块之外。为什么当我将这种方法抽象到historicalBootstrap函数中时它失败了?我期待三个(_0 = ...,_1 = ...,_2 = ...)引导脚本。

谢谢。

1 个答案:

答案 0 :(得分:1)

您正在使用$i来控制for循环,还包含curl句柄以及包含json解码结果。

您还要对返回的json进行解码,然后再次直接对其进行编码,而不是必需的。

尝试将其更改为

function historicalBootstrap($years, $id){

    for($i = 0; $i < 3; $i++){
        $date = $years[$i]; 
        $ch = curl_init("http://openexchangerates.org/api/historical/{$date}?app_id={$id}");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $jsonHistoricalRates = curl_exec($ch);
        curl_close($ch);
        echo '<script>_'. $i . 'historical = '. $jsonHistoricalRates . ';' . '</script>';
    }   
}

您还可以使用foreach()代替for

,使其更加灵活
function historicalBootstrap($years, $id){
    foreach ($years as $i => $year) {
        $ch = curl_init("http://openexchangerates.org/api/historical/{$year}?app_id={$id}");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $jsonHistoricalRates = curl_exec($ch);
        curl_close($ch);
        echo '<script>_'. $i . 'historical = '. $jsonHistoricalRates . ';' . '</script>';
    }   
}

现在,如果你将4年时间用于该功能,则不需要修改此代码。