Ich führe eine Curl-Anfrage in einer eXist-Datenbank über PHP aus. Das Dataset ist sehr groß, und daher benötigt die Datenbank durchweg viel Zeit, um eine XML-Antwort zurückzugeben. Um dies zu beheben, haben wir eine Curl-Anfrage mit einer angeblich langen Zeitüberschreitung eingerichtet.
$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);
Die Curl-Anforderung endet jedoch konsistent, bevor die Anforderung abgeschlossen ist (<1000, wenn sie über einen Browser angefordert wird). Weiß jemand, ob dies der richtige Weg ist, um Timeouts in Curl zu setzen?
set_time_limit(0);
wenn das Skript auf der Konsole ausgeführt wird.php -d max_execution_time=1 -r 'while(true){$r=1*1;}'
oder etwas in Aktion beobachten, dass der Cli keine magische "immer unbegrenzte" Flagge hat.set_time_limit(0)
Sie nicht, wenn Sie es nicht in einer Schleife verwenden.Hmm, es sieht für mich so aus, als würde es
CURLOPT_TIMEOUT
die Zeit definieren, die eine cURL-Funktion für die Ausführung benötigt. Ich denke, Sie sollten sichCURLOPT_CONNECTTIMEOUT
stattdessen umsehen, da dies cURL die maximale Zeit angibt, die gewartet werden muss, bis die Verbindung hergestellt ist.quelle
CURLOPT_TIMEOUT
ist , wie lange die Funktion übernimmt, die zugrunde liegende curl Bibliothek docs zu sagen scheinen darüber ist , wie lange dauert die Anforderung, die eine interessante Unterscheidung ist - nicht sicher , dass die Art und Weise zu lesen!Es gibt eine Eigenart, die für einige Leute relevant sein könnte ... Aus den Kommentaren der PHP-Dokumente.
Von http://www.php.net/manual/en/function.curl-setopt.php#104597
quelle
Ihr Code legt das Zeitlimit auf 1000 Sekunden fest . Verwenden Sie für Millisekunden
CURLOPT_TIMEOUT_MS
.quelle
Sie müssen sicherstellen, dass zwischen Ihnen und der Datei Zeitüberschreitungen bestehen. In diesem Fall PHP und Curl.
Zu sagen , Curl nie Timeout , wenn eine Übertragung noch aktiv ist, die Sie einstellen müssen ,
CURLOPT_TIMEOUT
um0
, statt1000
.In PHP müssen Sie wiederum Zeitlimits entfernen, oder PHP selbst (standardmäßig nach 30 Sekunden) beendet das Skript gemäß Curls Anfrage. Dies allein sollte Ihr Problem beheben .
Wenn Sie Datenintegrität benötigen, können Sie außerdem eine Sicherheitsebene hinzufügen, indem Sie Folgendes verwenden
ignore_user_abort
:Eine Client-Trennung unterbricht die Ausführung des Skripts und beschädigt möglicherweise Daten,
z. Nicht-Übergangs-Datenbankabfrage, Erstellen einer Konfigurationsdatei usw., während in Ihrem Fall eine Teildatei heruntergeladen wird ... und Sie könnten sich darum kümmern oder nicht.
Beantwortung dieser alten Frage, da dieser Thread bei der Suche nach Suchmaschinen ganz oben steht
CURL_TIMEOUT
.quelle
Sie können die Anforderung nicht über einen Browser ausführen. Es wird eine Zeitüberschreitung auftreten, bis der Server, auf dem die CURL-Anforderung ausgeführt wird, reagiert. Der Browser läuft wahrscheinlich in 1-2 Minuten ab, dem Standard-Netzwerk-Timeout.
Sie müssen es über die Befehlszeile / das Terminal ausführen.
quelle
Wenn Sie PHP als fastCGI-Anwendung verwenden, überprüfen Sie unbedingt die Einstellungen für das fastCGI-Zeitlimit. Siehe: PHP Curl Put 500 Fehler
quelle