Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Methoden gibt es, um das PHP-Timeout festzulegen?

Welche Methoden gibt es, um das PHP-Timeout festzulegen?

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-05-26 17:23:335251Durchsuche

In diesem Artikel erfahren Sie, wie Sie das PHP-Timeout festlegen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein. 1. PHP-Dateiausführungszeitlimit Sie können die integrierte Methode zum Festlegen des Timeouts mithilfe der PHP-Skriptmethode verwenden. Fügen Sie den folgenden Code zur PHP-Datei hinzu, die für die Ausführung langfristiger Vorgänge erforderlich ist:

max_execution_time=30
Welche Methoden gibt es, um das PHP-Timeout festzulegen? Sie können das Timeout auch über die .htaccess-Datei und festlegen Fügen Sie der Datei den folgenden Code hinzu:

max_execution_time=600

(2) Stellen Sie die Skriptausführungszeit erneut ein und setzen Sie den Timer zurück.

set_time_limit (int $seconds): bool

seconds------Maximale Ausführungszeit in Sekunden. Bei der Einstellung 0 (Null) gibt es keine Zeitbegrenzung.

Legen Sie die Zeit in Sekunden fest, die das Skript ausführen darf. Wenn diese Einstellung überschritten wird, gibt das Skript einen schwerwiegenden Fehler zurück. Der Standardwert ist 30 Sekunden oder der in max_execution_time in php.ini definierte Wert, sofern dieser Wert vorhanden ist.

Wenn diese Funktion aufgerufen wird, startet set_time_limit() den Timeout-Zähler von Null neu. Mit anderen Worten: Wenn das Standard-Timeout 30 Sekunden beträgt und set_time_limit(20) aufgerufen wird, wenn das Skript 25 Sekunden lang ausgeführt wurde, beträgt die Gesamtzeit, die das Skript bis zum Timeout ausführen kann, 45 Sekunden.

2. PHP Curl-Anfrage-Timeout

Curl ist eine häufig verwendete Bibliothek für den Zugriff auf die HTTP-Protokollschnittstelle. Sie verfügt über eine hohe Leistung und einige gleichzeitige Unterstützungsfunktionen.

curl_setopt($ch, opt) kann einige Timeout-Einstellungen festlegen, hauptsächlich einschließlich:

a, CURLOPT_TIMEOUT legt die maximale Anzahl von Sekunden fest, die CURL ausführen darf.

b, CURLOPT_TIMEOUT_MS Legen Sie die maximale Anzahl von Millisekunden fest, die CURL ausführen darf.

c. CURLOPT_CONNECTTIMEOUT ist die Wartezeit, bevor eine Verbindung hergestellt wird. Wenn es auf 0 gesetzt ist, wird es auf unbestimmte Zeit warten.

d, CURLOPT_CONNECTTIMEOUT_MS Die Zeit, die auf einen Verbindungsversuch gewartet wird, in Millisekunden. Wenn auf 0 gesetzt, unendlich warten.

d. h. CURLOPT_DNS_CACHE_TIMEOUT legt die Zeit fest, die DNS-Informationen im Speicher speichert. Der Standardwert beträgt 120 Sekunden.

3. PHP-Socket-Request-Timeout

<?php
ini_set(&#39;max_execution_time&#39;, 600);//秒为单位,自己根据需要定义

Obwohl PHP über einen Timeout-Parameter für die Verbindung zum Socket für die fsockopen()-Methode verfügt, gibt es keine Timeout-Parametereinstellung für das Lesen und Schreiben von Daten nach einer erfolgreichen Verbindung wie in C. Es spielt keine Rolle, PHP bietet eine Reihe von Methoden für Streams, um Zeitüberschreitungen zu verhindern.

php_value max_execution_time 600

Stellen Sie den Datenfluss auf den Blockierungsmodus ein, um ein Beenden zu verhindern, bevor die Daten gelesen wurden.

Wenn der Modus falsch ist, wechselt der angegebene Socket-Deskriptor in den Nicht-Blockierungsmodus. Wenn er wahr ist, wechselt er in den Blockierungsmodus. Dieser Effekt ähnelt dem Lesen von fgets() aus dem Socket. Im Nicht-Block-Modus kehrt fgets() sofort zurück, während es im Block-Modus darauf wartet, dass die Daten die Anforderungen erfüllen.

<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=> 1, "usec"=> 0 ) ); // 接收
socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=> 3, "usec"=> 0 ) );  // 发送

Legen Sie den Timeout fest. Dieser Satz sollte sofort nach erfolgreichem Verbindungsaufbau hinzugefügt werden. Die folgende Parametereinheit ist Sekunden. Holen Sie sich den Header/die Metadaten aus dem gekapselten Protokolldateizeiger und geben Sie ein Array im Format zurück:

stream_set_blocking( $fp , false )

Der Index timed_out ist die Zeitüberschreitung. Wenn keine Zeitüberschreitung vorliegt, ist er falsch. Dies sollte beachtet werden B. fwrite( ), fread(), hinzugefügt werden, und jedes Mal, wenn sie gelesen wird, muss beurteilt werden, ob eine Zeitüberschreitung aufgetreten ist. Für eine Verbindung ist nur eine Timeout-Einstellung stream_set_timeout ( $ fp , 10 ) reicht aus.

stream_set_timeout( $fp , 10 )

4. File_get_contents-Timeout-Verarbeitung (Socket kapseln, file_put_contents ist ähnlich)

Ab PHP5 unterstützt file_get_content bereits Kontext (im Handbuch heißt es: 5.0.0 Kontextunterstützung hinzugefügt), d. h. ab 5.0, file_get_contents kann tatsächlich Daten POSTEN. Ähnliche sind fopen (Kontextunterstützung wurde seit PHP5 ebenfalls hinzugefügt) und file (Unterstützung wurde in PHP5 hinzugefügt).

Array
(
  [stream_type] => tcp_socket
  [mode] => r+
  [unread_bytes] => 0
  [seekable] =>
  [timed_out] =>
  [blocked] => 1
  [eof] =>
)

5. PHP-Soap-Anfrage-Timeout

$fp = @fsockopen( $ip , $port, $errNo , $errstr, 30 );
if( !$fp )
{
  return false;
}
else
{
  stream_set_timeout( $fp , 3 ) ;
  //发送数据
  fwrite( $fp , $packet ) ;
  $status = stream_get_meta_data( $fp ) ;
  //发送数据超时
  if( $status[&#39;timed_out&#39;] )
  {
    echo "Write time out" ;
    fclose( $fp );
    return false;
  }
  //读取数据
  $buf = fread( $fp , 16 ) ;
  $status = stream_get_meta_data( $fp ) ;
  //读取数据超时
  if( $status[&#39;timed_out&#39;] )
  {
    echo "Read time out" ;
    fclose( $fp );
    return false;
  }
}

Soap-Anfrage kann auch den Ressourcen-Stream-Kontext verwenden, und das Anfrage-Timeout kann in stream_context_create() geschrieben werden.

<?php
$get_opts = array(   
  &#39;http&#39;=>array(   
    &#39;method&#39; => "GET",   
    &#39;timeout&#39; => 1,//单位秒, 默认使用php.ini中default_socket_timeout的设置
   )   
);
$post_opts = array(
&#39;http&#39;=>array(   
    &#39;method&#39; => "POST",   
    &#39;timeout&#39; => 60,//单位秒, 可用ini_set(&#39;default_socket_timeout&#39;, 120);进行默认设置
    &#39;content&#39; =>  http_build_query($param_array, &#39;&#39;, &#39;&&#39;)
   )   
);
 
$opts = $get_opts;
$res = file_get_contents($url, FALSE, stream_context_create($opts)); //返回string,失败返回FALSE

Empfohlenes Lernen:

php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es, um das PHP-Timeout festzulegen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen