2017-06-19 2 views
0

Also ich versuche, alle JSON-Daten von einer API zu bekommen, aber ich kann nicht zuverlässig die Schleife zu Ende, während alle Daten erhalten. Hier ist der Code, den ich derzeit habePHP-Programm hängt, wenn cURL in während Schleife

$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); 
} 

Alle Variablen sind zuvor deklariert. Ich war in der Lage, die JSON-Daten zu bekommen, wenn ich die While-Schleife einmal num eine bestimmte Anzahl erreicht, aber das wird nicht immer zuverlässig sein. Der Code stoppt die Ausgabe von JSON-Daten um die 3. oder 4. Ausführung und hängt sich dort für bis zu 5 Minuten auf, bevor er eine Reihe von Fehlern ausgibt.

Jede Hilfe wäre willkommen!

Edit: Ich habe mein Problem gefunden. Egal, was der Parameter meiner if-Anweisung ist, mein Programm weigert sich, $continue zu FALSE zu ändern. Ich habe meinen Code aktualisiert, wenn jemand nachvollziehen könnte, warum das großartig wäre. Beachten Sie, dass, selbst wenn ich den if-Parameter auf 0 == 0 setze, wird sich $continue immer noch nicht ändern.

Edit 2: Ich habe alle meine Probleme gelöst.

+0

Was sind die Fehler, die Sie bekommen? – aynber

+0

Ich sehe nicht, wo Sie irgendwelche Daten ausgeben, Sie überschreiben Ihre Daten '$ json' mit jeder Schleife, von der ich nicht glaube, dass Sie sie machen wollen. – cmorrissey

+0

@aynber "Offset-Betrag überschreitet die Gesamtzahl der Datensätze." – BrastaSauce

Antwort

0

Aus dem Fehler, den Sie erhalten, scheint es, dass die Website die ungültige URL behandelt und mit einer Fehlerseite reagiert. Daher ist die $response nicht falsch und $continue ist immer wahr.

Sie sollten das Ergebnis besser überprüfen. Suchen Sie entweder nach Zeichenfolgen für Fehler, von denen Sie wissen, dass sie keine Datensätze mehr anzeigen würden (könnte problematisch sein), oder überprüfen Sie die Header. Hoffentlich kommt die API mit einem fehlerhaften Statuscode oder etwas zurück.

Auch nachdem Sie das tun, würde ich eine Gesundheitsprüfung zu Ihrem while hinzufügen. Haben Sie etwas Zähler, der die Schleife stoppen aus der Hand aus gehen:

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

Dies wird sicherstellen, dass Sie Schleife 100 mal ganz am meisten.

Verwandte Themen