Heim  >  Artikel  >  Backend-Entwicklung  >  Wie stelle ich in PHP ein, dass Curl kein Timeout auslöst? Eine kurze Analyse mehrerer Methoden

Wie stelle ich in PHP ein, dass Curl kein Timeout auslöst? Eine kurze Analyse mehrerer Methoden

PHPz
PHPzOriginal
2023-03-27 19:03:362303Durchsuche

In PHP ist Curl eine leistungsstarke Bibliothek zum Senden von HTTP-Anfragen. Allerdings wird bei einer Curl-Anfrage standardmäßig ein Timeout festgelegt, nach dessen Ablauf die Anfrage abgebrochen wird. Diese Zeit beträgt standardmäßig 1 Sekunde. In einigen Fällen möchten wir jedoch möglicherweise, dass die Curl-Anfrage über einen längeren Zeitraum ausgeführt wird, anstatt innerhalb des Standardzeitlimits abzubrechen. Wie stelle ich das Timeout der Curl-Anfrage über PHP-Code ein? Hier gibt es mehrere Möglichkeiten:

  1. Ändern Sie die php.ini-Datei.

Wenn Sie über die Berechtigung zum Zugriff auf die php.ini-Datei verfügen, können Sie das Curl-Timeout in dieser Datei ändern. Suchen Sie in der Datei php.ini die folgenden zwei Optionen:

; Maximum amount of time (in seconds) that is allowed for cURL functions to execute.
; Note: This value should not be set to an excessive amount, as it will negatively
; affect server performance. 
; Default Value: 30
curl_timeout = 30

; The number of seconds to wait while trying to connect.
; Default Value: 60
curl_connect_timeout = 60

Wobei curl_timeout die maximale Ausführungszeit der Curl-Anfrage und curl_connect_timeout das Verbindungszeitlimit von Curl ist Anfrage. Sie müssen ihre Werte auf die gewünschte Zeit in Sekunden ändern. Nachdem die Änderung abgeschlossen ist, starten Sie den Apache- oder PHP-FPM-Dienst neu, damit sie wirksam wird. curl_timeout 是 curl 请求的最大执行时间,curl_connect_timeout 是 curl 请求的连接超时时间。你需要将它们的值改为你想要的时间(以秒为单位)。修改完毕后,重启 Apache 或者 PHP-FPM 服务使之生效。

  1. 使用 curl_setopt 函数

如果你没有权限修改 php.ini 文件,可以在 PHP 代码中使用 curl_setopt 函数设置 curl 的超时时间。这个函数用于设置 curl 的选项,其使用方式如下:

bool curl_setopt ( resource $ch , int $option , mixed $value )

其中,$ch 是 curl 的句柄(通常使用 curl_init 函数初始化),$option 是需要设置的选项,$value 是选项的值。针对超时时间,有两个选项可供设置:

CURLOPT_TIMEOUT:curl 请求最大执行时间(以秒为单位);
CURLOPT_CONNECTTIMEOUT:curl 请求连接超时时间(以秒为单位)。

你可以使用如下代码来设置上述选项:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com");
curl_setopt($ch, CURLOPT_TIMEOUT, 120); // 设置 curl 请求最大执行时间为 120 秒(2 分钟)
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); // 设置 curl 请求连接超时时间为 30 秒
$result = curl_exec($ch);
curl_close($ch);

在上面的代码中,我们设置了 curl 请求的最大执行时间为 120 秒,连接超时时间为 30 秒。如果 curl 请求在 120 秒内没有完成或者在 30 秒内没有成功建立连接,请求将被取消。

  1. 在 URL 中添加参数

如果你不想修改 PHP 配置或者使用 curl_setopt 函数,还可以在 URL 中添加参数来设置 curl 请求的超时时间。具体操作如下:

http://example.com/?curl_timeout=120&curl_connect_timeout=30

在上面的 URL 中,我们在请求参数中添加了 curl_timeoutcurl_connect_timeout

    Funktion „curl_setopt“ verwenden

    Wenn Sie keine Berechtigung zum Ändern der php.ini-Datei haben, können Sie die Funktion „curl_setopt“ verwenden, um das Curl-Timeout im PHP-Code festzulegen. Diese Funktion wird verwendet, um die Optionen von Curl festzulegen. Sie wird wie folgt verwendet:

    rrreee🎜wobei $ch das Handle von Curl ist (normalerweise mit der Funktion „curl_init“ initialisiert) und $ option ist die Option, die festgelegt werden muss, $value ist der Wert der Option. Es gibt zwei Optionen zum Festlegen des Timeouts: 🎜rrreee🎜Sie können den folgenden Code verwenden, um die oben genannten Optionen festzulegen: 🎜rrreee🎜Im obigen Code legen wir die maximale Ausführungszeit der Curl-Anfrage auf 120 Sekunden und das Verbindungszeitlimit fest . beträgt 30 Sekunden. Wenn die Curl-Anfrage nicht innerhalb von 120 Sekunden abgeschlossen wird oder die Verbindung nicht innerhalb von 30 Sekunden erfolgreich hergestellt wird, wird die Anfrage abgebrochen. 🎜
      🎜🎜Parameter zur URL hinzufügen🎜🎜🎜🎜Wenn Sie die PHP-Konfiguration nicht ändern oder die Funktion „curl_setopt“ verwenden möchten, können Sie der URL auch Parameter hinzufügen, um das Timeout festzulegen Curl-Anfragen. Der spezifische Vorgang ist wie folgt: 🎜rrreee🎜In der obigen URL haben wir die Parameter curl_timeout und curl_connect_timeout zu den Anforderungsparametern hinzugefügt, um den Timeout-Zeitraum der Curl-Anfrage festzulegen. Curl liest diese Parameter automatisch und wendet ihre Werte an, wenn eine Anfrage gestellt wird. Diese Methode ist relativ einfach, hat jedoch einen Nachteil: Die in der URL enthaltenen Parameter können vom Browser oder Reverse-Proxy-Server abgefangen oder geändert werden. 🎜🎜🎜Zusammenfassung🎜🎜🎜Durch Ändern der php.ini-Datei oder Verwenden der Funktion „curl_setopt“ oder Hinzufügen von Parametern in der URL können wir das Timeout für Curl-Anfragen in PHP festlegen. Wenn Sie Curl verwenden, müssen Sie das Timeout entsprechend der jeweiligen Situation angemessen einstellen. Stellen Sie das Timeout nicht zu lang ein, um eine Beeinträchtigung der Serverleistung zu vermeiden. 🎜

Das obige ist der detaillierte Inhalt vonWie stelle ich in PHP ein, dass Curl kein Timeout auslöst? Eine kurze Analyse mehrerer Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn