2017-06-19 50 views
0

所以我試圖從一個API獲取所有json數據,但是我無法可靠地得到所有數據的循環結束。下面是代碼我現在有在循環中cURL時掛起的PHP程序

$num = 1000; 
$continue = TRUE; 
$loops = 0; 

while ($continue == TRUE AND $loops < 3) { 
    // initialize cURL session 
    $ch = curl_init($host . '/' . $service . '?limit=500' . '&offset=' . ($num)) or die("Could not connect to API."); 

    // set headers 
    $httpHeader = array(
      'Content-Type: application/json;charset=UTF-8', 
      'Accept: application/json', 
      'SecureUrl: ' . $secureUrl, 
      'PrivateKey: ' . $privateKey, 
      'Token: ' . $token, 
    ); 

    curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

    $response = curl_exec($ch); 


    $json = json_decode($response, TRUE); 

    if (isset($json[0]["Key"])) { 
     $continue = FALSE; 
    } 

    $num += 500; 

    $loops++; 

    curl_close($ch); 
} 

所有的變量都事先聲明。如果我停止while循環,一旦num達到一定數量,我就能夠獲得json數據,但這並不總是可靠的。代碼在第3次或第4次執行時停止輸出json數據,並且在噴出一堆錯誤之前,在那裏停留最多5分鐘。

任何幫助,將不勝感激!

編輯:我發現我的問題。無論我的if語句的參數是什麼,我的程序都拒絕將$continue更改爲FALSE。我已經更新了我的代碼,如果有人能夠推斷爲什麼這會很好。請注意,即使我將if參數設置爲0 == 0$continue仍然不會更改。

編輯2:我解決了我所有的問題。

+0

你得到的錯誤是什麼? – aynber

+0

我沒有看到你輸出任何數據,你是如何覆蓋你的數據'$ json'每個循環,我不認爲你想要做的。 – cmorrissey

+0

@aynber「偏移量超過記錄總數」。 – BrastaSauce

回答

0

從您收到的錯誤,似乎該網站正在處理無效的網址和響應與錯誤頁面。因此,$response並非虛假,並且$continue始終爲真。

你應該檢查結果更好。檢查您知道的錯誤字符串是否表示不再有記錄(可能有問題)或檢查標題。希望API將返回一個錯誤的狀態碼或其他東西。

甚至在你這樣做之後,我會爲你的while添加完整性檢查。有一些計數器將從走出去的手停止循環:

$loops = 100; 
while($continue AND $loops > 0){ 
    ... 
    //Your code 
    ... 
    $loops--; 
} 

這將確保你在循環很大部分的100倍。