Mit einem try/catch-mit cURL in PHP

Ich dachte, ich hätte dieses Problem gelöst, aber offensichtlich habe ich noch nicht und hatte gehofft, jemand könnte in der Lage sein, etwas Licht auf, was ich falsch mache. Ich werde versuchen, ein Stück von PHP-code zu überprüfen, eine Datei auf einem server und auf der Basis der Reaktion eine Aktion durchzuführen. Die Datei ist eine einfache text-Datei, die entweder das Wort "true" oder "false" geschrieben. Wenn die Datei vorhanden ist oder der Rückgabe "wahr" ist, geht das Skript zu einem url. Wenn es nicht vorhanden ist (d.h. wenn der server nicht verfügbar ist) oder die Rückgabe "false" ist, geht das Skript zu einem zweiten url. Der folgende Code ist der code-snippet, das ich verwendet habe, bis jetzt.

$options[CURLOPT_URL] = 'https://[domain]/test.htm';

$options[CURLOPT_PORT] = 443;
$options[CURLOPT_FRESH_CONNECT] = true;
$options[CURLOPT_FOLLOWLOCATION] = false;
$options[CURLOPT_FAILONERROR] = true;
$options[CURLOPT_RETURNTRANSFER] = true;
$options[CURLOPT_TIMEOUT] = 10;

//Preset $response var to false and output
$fb = "";
$response = "false";
echo '<p class="response1">'.$response.'</p>';

try {
    $curl = curl_init();
    echo curl_setopt_array($curl, $options);
    //If curl request returns a value, I set it to the var here. 
    //If the file isn't found (server offline), the try/catch fails and var should stay as false.
    $fb = curl_exec($curl);
    curl_close($curl);
}
catch(Exception $e){
    throw new Exception("Invalid URL",0,$e);
}

if($fb == "true" || $fb == "false") {
    echo '<p class="response2">'.$fb.'</p>';
    $response = $fb;
}

//If cURL was successful, $response should now be true, otherwise it will have stayed false.
echo '<p class="response3">'.$response.'</p>';

Diesem Beispiel hier, nur geht durch die Bearbeitung der Datei test. Der Inhalt von "test.htm" entweder "true" oder "false".

Dies mag wie eine gewundene Weg, es zu tun, aber die Datei ist auf dem server eines Drittanbieters (ich habe keine Kontrolle über diese) und muss überprüft werden, wie die Drittanbieter entscheiden kann, erzwingen Sie ein failover auf die zweite url, während der Wartungsarbeiten ist auf den ersten url. Also, warum kann ich nicht einfach überprüfen, für die Datei existiert.

Habe ich getestet auf einem lokalen setup und alles verhält sich wie erwartet. Das problem entsteht, wenn die Datei nicht vorhanden ist. Die $fb = curl_exec($curl); nicht scheitern, es gibt nur einen leeren Wert. Ich hatte gedacht, dass, wie das ist, auf einem IIS PHP-server, das Problem mit PHP auf dem server, aber ich sehe jetzt das Problem lokal (auf einem Unix-system).

Wenn jemand könnte Einblick geben, was ich vielleicht falsch mache, ich würde es wirklich schätzen. Es kann auch sein, einen viel kürzeren Weg von Prüf diese Datei konnte ich gehen den langen Weg um dies zu tun, also wirklich für jede Hilfe dankbar.

T

  • Könntest du nicht einfach eine exception werfen, wenn $fb leer ist, zusätzlich zu der Ausnahme, die ausgelöst durch Ihre try-catch-block?
  • Nicht wirklich brauchen, um eine exception zu werfen auf die $fb leer ist. Die response-variable ist auf false festgelegt, und alle $fb verwendet wird, ist zu prüfen, ob der Zustand anders ist, und dann setzt die Reaktion. Aber je mehr ich es betrachte desto falscher sieht es aus. Ich habe diese für 8 Stunden am Stück, so kann ich nicht sehen es mehr!!!
  • Oh, wie ich sehe. Ich zahlte zu viel Aufmerksamkeit auf die Tatsache, dass Sie darüber gesprochen, curl_exec() nicht und Sie warf eine neue Ausnahme in der catch-Anweisung und nicht die Kommentare Lesen, die nah genug.
Schreibe einen Kommentar