In der PHP -Entwicklung ist INI_SET ('max_execution_time', 0) eine übliche Anweisung, mit der die Skriptausführungszeit festgelegt wurde. Sein Ziel ist es, Skripte ohne zeitlich begrenzt ausgeführt zu werden, und werden normalerweise verwendet, um langlebige Aufgaben wie Datenimport, großräumige Datenverarbeitung usw. auszuführen. Viele Entwickler werden jedoch auf das Problem stoßen: Auch wenn INI_SET ('max_execution_time', 0), wird im Drehbuch ausdrücklich eingesetzt, um die Infinit-Ausführungszeit des Skripts zu festlegen. Die Zeitspanne wird immer noch auftreten. Das Drehbuch-Timeout-Fehler wird immer noch in der Skriptszeit eingesetzt. Der Zeitpunkt wird immer noch auftreten. Das Drehbuch-Timeout wird immer noch auftreten. Die Zeit wird der Skript-Zeitpunkt immer noch eingesetzt, und der Zeitpunkt der Skript wird immer noch der Drehbuch festgelegt, der Zeitpunkt wird immer noch eingesetzt, und das Drehbuch-Timeout-Zeitpunkt wird immer noch eingesetzt. Warum passiert das?
Zunächst müssen wir die Rolle von max_execution_time verstehen. Dieses Konfigurationselement wird verwendet, um die maximale Ausführungszeit (Einheit: Sekunden) von PHP -Skripten festzulegen. Standardmäßig begrenzt PHP die maximale Ausführungszeit des Skripts, um durch unbegrenzte Ausführung überkonsumierende oder abstürzende Serverressourcen zu vermeiden. Wenn das Skript dieses Zeitlimit überschreitet, wird ein Zeitüberschreitungsfehler geworfen und die Ausführung wird gestoppt.
Beispielsweise setzt INI_SET ('max_execution_time', 0) die maximale Ausführungszeit auf 0, was bedeutet, dass das Skript keine Zeitlimit hat und auf unbestimmte Zeit ausgeführt werden kann.
Obwohl Ini_Set ('max_execution_time', 0) theoretisch ermöglichen sollte, dass PHP -Skripte unbegrenzt ausgeführt werden, wird es in einigen Fällen möglicherweise nicht wirksam. Hier sind einige häufige Gründe:
Viele Webserver, wie Apache oder Nginx, setzen auch Zeitüberschreitungsgrenzen in Konfigurationsdateien. Bei Apache handelt es sich normalerweise um eine Zeitlimitanweisung , während Nginx Einstellungen wie Proxy_Read_Timeout , fastcgi_read_timeout usw. enthält. Wenn diese Timeout-Einstellungen auf Serverebene in der PHP-Konfiguration strenger sind als max_execution_time . Selbst wenn PHP eine unbegrenzte Ausführungszeit festlegt, führt das Timeout -Grenzwert des Webservers dennoch zu einer Unterbrechung der Skripts.
Problemumgehung : Überprüfen Sie die Konfiguration der Webserver, um sicherzustellen, dass ihre Zeitüberschreitung lang genug festgelegt ist, oder deaktivieren Sie das Zeitüberschreitungslimit.
Wenn Sie PHP -Skripte in der Befehlszeilenschnittstelle (CLI) ausführen, wird INI_SET ('max_execution_time', 0) normalerweise wirksam, da die Zeitüberschreitungsgrenze in der CLI normalerweise nicht so streng wie die Webumgebung ist. In einer Webumgebung kann die Einstellung max_execution_time jedoch von der Webserverkonfiguration beeinflusst werden.
Problemumgehung : Wenn Sie in einer Webumgebung testen und die Einstellung der Server -Zeitüberschreitung nicht deaktivieren können, können Sie versuchen, das Skript in die Befehlszeilenumgebung zu verschieben, um die Servereinstellungen auszuführen.
Einige PHP -Ausführungsmodi (z. B. den FPM -Modus) können unterschiedliche Konfigurationsverhalten aufweisen. In einigen Fällen funktioniert die Einstellung max_execution_time möglicherweise nicht wie erwartet, da die FPM möglicherweise eine eigene Zeitüberschreitungskonfiguration hat. Auch wenn das Skript in den Ausführungszeiteinstellungen innerhalb von PHP unbegrenzt ist, können die Zeitüberschreitungseinstellungen von FPM oder FASTCGI die maximale Ausführungszeit von PHP -Anforderungen einschränken.
Problemumgehung : Überprüfen Sie die Konfigurationsdatei von PHP-FPM oder FASTCGI, um sicherzustellen, dass keine Zeitlimit oder ein längeres Zeitüberschreitungslimit festgelegt ist.
Die Funktion set_time_limit () in PHP ist auch eine Funktion, die die maximale Ausführungszeit des Skripts steuert. Ähnlich wie ini_set ('max_execution_time', 0) wird es auch verwendet, um die Ausführungszeit des Skripts festzulegen. Es ist jedoch zu beachten, dass set_time_limit () dynamisch aktiv ist und jedes Mal, wenn es ausgeführt wird, die maximale Ausführungszeit des Skripts zurücksetzt. Wenn der Aufruf set_time_limit () im Skript vorhanden ist, kann er die max_execution_time überschreiben, die Sie mit Ini_Set festgelegt haben.
Lösung : Überprüfen Sie, ob die Funktion set_time_limit () im Code aufgerufen wird, um sicherzustellen, dass sie die Einstellungen von max_execution_time nicht beeinflusst.
Zusätzlich zur Verwendung von Ini_Set () zum Festlegen max_execution_time in Skripts besteht eine weitere Möglichkeit, dass dieser Wert in der PHP.ini -Konfigurationsdatei von PHP festgelegt wurde und der Wert so eingestellt ist, dass es unveränderlich ist. In einigen gemeinsam genutzten Hosting- oder eingeschränkten Serverumgebungen kann die max_execution_time in der Php.ini -Datei auf einen festen Wert eingestellt worden sein, und normalerweise kann der Wert nicht durch Ini_Set () geändert werden.
Problemumgehung : Überprüfen Sie nach Möglichkeit das Konfigurationselement max_execution_time in der Php.ini -Datei oder wenden Sie sich an den Serveradministrator, um diese Einstellung anzupassen.
Einige PHP-Frameworks oder Code-Basis von Drittanbietern können zusätzliche Beschränkungen für die Ausführungszeit oder auf Anruf set_time_limit () oder andere Funktionen aufrufen, die die Zeitüberschreitung im Hintergrund einschränken. In diesem Fall kann das Framework oder die Bibliothek diese Einstellung überschreiben, selbst wenn Sie max_execution_time in Ihrem Code festgelegt werden.
Problemumgehung : Überprüfen Sie die Dokumentation für das Framework oder die Bibliothek, mit der Sie ausführungsgemäß ausführten, und passen Sie diese Grenzen angemessen an oder umgehen Sie sie angemessen.
Ini_Set ('max_execution_time', 0) ermöglicht PHP -Skripten ohne Einschränkungen, aber in einigen Fällen kann es ungültig sein. Zu den häufigen Gründen zählen Konfigurationsbeschränkungen auf dem Webserver, der Betriebsmodus von PHP, die Störung anderer Funktionen, Einschränkungen in PHP -Konfigurationsdateien und Einschränkungen im verwendeten Framework oder der verwendeten Bibliothek. Dieses Problem kann normalerweise gelöst werden, indem diese Faktoren untersucht und angepasst werden.