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

巴扎黑
Freigeben: 2016-11-24 13:56:15
Original
1366 Leute haben es durchsucht

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“

0s

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 30s 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);  
?>
Nach dem Login kopieren


Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!