Heim > Artikel > Backend-Entwicklung > So beheben Sie das Timeout der PHP-Anforderungsschnittstelle
[HTTP-Zugriff]
Im Allgemeinen greifen wir auf viele Arten auf HTTP zu, hauptsächlich: Curl, Socket, file_get_contents() und andere Methoden.
Wenn der Server der anderen Partei nie antwortet, geraten wir in eine Tragödie. Es ist leicht, den gesamten Server zu zerstören, daher müssen wir auch das Timeout-Problem beim Zugriff auf http berücksichtigen.
[CURL-Zugriff auf HTTP]
CURL ist eine häufig verwendete und zuverlässige Bibliothek für den Zugriff auf die HTTP-Protokollschnittstelle mit hoher Leistung und einigen Parallelitätsfunktionen usw.
CURL:
curl_setopt($ch, opt) kann einige Timeout-Einstellungen festlegen, hauptsächlich einschließlich:
CURLOPT_TIMEOUT Set Die maximale Anzahl an Sekunden, die cURL ausführen darf.
CURLOPT_TIMEOUT_MS legt die maximale Anzahl von Millisekunden fest, die cURL ausführen darf. (Hinzugefügt in cURL 7.16.2. Verfügbar ab PHP 5.2.3.)
CURLOPT_CONNECTTIMEOUT Die Zeit, die vor dem Herstellen einer Verbindung gewartet werden soll. Wenn auf 0 gesetzt, wird unendlich gewartet.
CURLOPT_CONNECTTIMEOUT_MS Die Zeit, die auf einen Verbindungsversuch gewartet wird, in Millisekunden. Wenn auf 0 gesetzt, unendlich warten. Hinzugefügt in cURL 7.16.2. Verfügbar ab PHP 5.2.3.
CURLOPT_DNS_CACHE_TIMEOUT legt die Zeit zum Speichern von DNS-Informationen im Speicher fest. Der Standardwert beträgt 120 Sekunden.
normales Curl-Timeout der zweiten Ebene:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60); //Sie müssen nur die Anzahl der Sekunden festlegen
curl_setopt( $ ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);
normale Curl-Timeout-Nutzung der zweiten Ebene:
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
Wenn für Curl ein Millisekunden-Timeout erforderlich ist, müssen Sie Folgendes hinzufügen:
curl_easy_setopt( curl, CURLOPT_NOSIGNAL, 1L ; Ein Beispiel für Curl mit einem Millisekunden-Timeout:
<?php if (!isset($_GET['foo'])) { // Client $ch = curl_init('http://example.com/'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意,毫秒超时一定要设置这个 curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用 $data = curl_exec($ch); $curl_errno = curl_errno($ch); $curl_error = curl_error($ch); curl_close($ch); if ($curl_errno > 0) { echo "cURL Error ($curl_errno): $curl_error\n"; } else { echo "Data received: $data\n"; } } else { // Server sleep(10); echo "Done."; } ?>Einige weitere Tipps: 1. Erfahrungsgemäß lautet die Zusammenfassung : cURL-Version >= libcurl/7.21, denken Sie daran, dass das Millisekunden-Timeout definitiv wirksam wird.
2. Es gibt auch ein Problem mit dem Millisekunden-Timeout von curl_multi. . Ein einzelner Zugriff unterstützt Timeout auf MS-Ebene, und curl_multi ist ungenau, wenn mehrere Aufrufe parallel erfolgen
[Zugriff auf HTTP über Stream-Verarbeitung]
Zusätzlich zu Curl , wir machen es oft auch selbst Verwenden Sie fsockopen oder die Dateioperationsfunktion, um das HTTP-Protokoll zu verarbeiten, daher ist auch unsere Timeout-Verarbeitung erforderlich. Empfohlenes Tutorial:PHP-Video-Tutorial
Das obige ist der detaillierte Inhalt vonSo beheben Sie das Timeout der PHP-Anforderungsschnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!