Grundlegender Schutz vor maximaler Ausführungszeit

Susan Sarandon
Freigeben: 2024-09-25 20:10:02
Original
631 Leute haben es durchsucht

Basic Protection Against Max Execution Time Limit

Jeder, der sich mit dem Import oder Export von Daten beschäftigt hat, ist wahrscheinlich auf das Problem gestoßen, dass ein Skript eine kurze Ausführungszeit hat. Die schnellste Lösung besteht oft darin, die PHP-Konfiguration anzupassen oder das Limit am Anfang des Skripts vollständig zu deaktivieren. Allerdings birgt eine deutliche Verlängerung der Ausführungszeit oder deren vollständige Deaktivierung Sicherheitsrisiken. Ein unaufhaltsames Hintergrundskript kann zu einem übermäßigen Ressourcenverbrauch führen.

Bei der Verarbeitung von Aufgaben über Iterationen hinweg ist es möglich, einzelne Durchläufe rechtzeitig zu überwachen und zu versuchen, die Ausführung ordnungsgemäß zu beenden, bevor das Zeitlimit abläuft.

// initialize basic variables for further work
$maxExecutionTime = (int)ini_get('max_execution_time');
$estimateCycleTime = 0;
$startTime = microtime(true);

// For demonstration purposes, we use an "infinite" loop with a simulated task lasting 10 seconds
while (true) {
   sleep(10);

   // Calculate the current runtime
   $currentRunTime = microtime(true) - $startTime;

   // Termination can be done either with a fixed constant
   // or by measuring the time of one pass and trying to use
   // the longest possible segment of the runtime
   // limit (has its problem).
   if ($estimateCycleTime === 0) {
       $estimateCycleTime = $currentRunTime;
   }

   // Check if the iteration stop time is approaching.
   // Subtract the time of one pass, which likely won't fit
   // within the window. 
   if (($maxExecutionTime - $estimateCycleTime) < $currentRunTime) {
       echo 'Time is end';
       break;
   }
}
Nach dem Login kopieren

Eine vorzeitige Beendigung auf Basis der Berechnung eines Durchgangs eignet sich für Fälle, in denen eine große Anzahl von Durchgängen in möglichst wenigen neuen Ausführungen abgearbeitet werden muss und jeder Vorgang in einem Durchgang ähnlich zeitaufwändig ist. Unterscheiden sich einzelne Durchgänge in ihrem Zeitbedarf, muss ein Koeffizient zur Durchlaufzeit addiert werden. Eine andere Möglichkeit besteht darin, eine vordefinierte Zeit zu verwenden:

$beforeEndTime = 1;

if (($maxExecutionTime - $beforeEndTime) < $currentRunTime) {
    echo 'Time is end';
    break;
}
Nach dem Login kopieren

Wenn das Skript nach der Iteration fortgesetzt wird, z. B. das Schließen von Verbindungen zu API-Endpunkten, das Schließen von Dateien oder das Ausführen anderer Vorgänge, ist es wichtig, daran zu denken, diese Zeit hinzuzufügen.

Das obige ist der detaillierte Inhalt vonGrundlegender Schutz vor maximaler Ausführungszeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
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
Neueste Artikel des Autors
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!