Heim  >  Artikel  >  Backend-Entwicklung  >  Die Funktion „File_get_contents“ fügt eine Timeout-Einstellung hinzu

Die Funktion „File_get_contents“ fügt eine Timeout-Einstellung hinzu

巴扎黑
巴扎黑Original
2016-11-24 13:56:151375Durchsuche

In der tatsächlichen PHP-Entwicklung verwenden wir häufig die Funktion file_get_contents, um den von der Remote-Seite zurückgegebenen Inhalt abzurufen. Wenn die Remote-Antwortzeit jedoch sehr langsam ist, bleibt file_get_contents() immer dort hängen und tritt keine Zeitüberschreitung auf Diesmal stellen wir manchmal fest, dass die Systemlast des Linux-Servers des Webdienstes plötzlich zunimmt. Überprüfen Sie mit dem Befehl top, ob die CPU-Auslastung vieler PHP-CGI-Prozesse nahezu 100 % beträgt.

Wir wissen, dass es in php.ini einen Parameter max_execution_time gibt, der die maximale Ausführungszeit von PHP-Skripten festlegen kann. In php-cgi (php-fpm) wird dieser Parameter jedoch nicht wirksam. Was die maximale Ausführungszeit eines PHP-Skripts wirklich steuern kann, ist der folgende Parameter in der Konfigurationsdatei php-fpm.conf:

C-Code

Das Timeout (in Sekunden) für die Bereitstellung eines einzelnen Anfrage, nach der der Arbeitsprozess beendet wird

Sollte verwendet werden, wenn die INI-Option „max_execution_time“ aus irgendeinem Grund die Skriptausführung nicht stoppt

„0“ bedeutet „aus“

85a5ad964406a59de25a1814c1109cc10s4b175f9a50d57c75316becd702e959dc

Der Standardwert ist 0 Sekunden, was bedeutet, dass das PHP-Skript weiterhin ausgeführt wird. Wenn also alle PHP-CGI-Prozesse in der Funktion file_get_contents() hängen bleiben, kann dieser Webserver keine neuen PHP-Anfragen mehr verarbeiten. Es ist jedoch erforderlich, diesen Parameter zu ändern und die maximale Ausführungszeit eines PHP-Skripts festzulegen Behandelt nur die Symptome, nicht aber die Grundursache. Wenn es beispielsweise in 85a5ad964406a59de25a1814c1109cc130s4b175f9a50d57c75316becd702e959dc geändert wird und file_get_contents() langsam Webinhalte abruft, bedeutet dies, dass 150 PHP-CGI-Prozesse nur 5 Dateien pro Sekunde verarbeiten können .Anfrage, WebServer ist auch schwer zu vermeiden „502 Bad Gateway“.

Um eine vollständige Lösung zu erreichen, besteht die einzige Möglichkeit für PHP-Programmierer darin, die Gewohnheit zu ändern, file_get_contents("http://example.com/") direkt zu verwenden, und stattdessen eine geringfügige Änderung vorzunehmen und eine Zeitüberschreitung hinzuzufügen . Verwenden Sie die folgende Methode, um HTTP-GET-Anfragen zu implementieren. Wenn Sie Schwierigkeiten damit haben, können Sie den folgenden Code selbst in eine Funktion kapseln.

<?php  
$ctx = stream_context_create(array(  
   &#39;http&#39; => array(  
       &#39;timeout&#39; => 1 //设置一个超时时间,单位为秒  
       )  
   )  
);  
file_get_contents("http://example.com/", 0, $ctx);  
?>


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
Vorheriger Artikel:phpObject(Objekt)Nächster Artikel:phpObject(Objekt)