2017-07-07 1 views
1

Im Kurzen auszuführen: Wie Sie den Code brechen, nachdem der Code mehr als 53 Sekunden dauert, um so etwas ausführen:Wie aus der Schleife erhalten, wenn der PHP-Skript mehr als 53 Sekunden dauert

while (5 < 200) 
{ 
// do some work here, which will take around 1-6 seconds 

if (code this loop is running for more than 53 seconds) 
break; 

} 


Wenn Sie wissen wollen, warum ich dies tun will:

Ok, das ist, was ich tue: ich bin Kopieren von Daten von 7 JSON Seiten im Web und in meine MySQL-Datenbank einfügen.

Der Code ist so etwas wie dieses:

$start_time = microtime(TRUE); // Helps to count PHP script execution time 


connect to database 
$number = get inserted number into database 
while ($number > ($number+20)) 

{ 

7 Open JSON File link like this - "example.com/$number?api=xxxyyzz" 

Use Prepared PDO statements to insert data into MySQL 

} 
// Code to count PHP script execution time 
$end_time = microtime(TRUE); 

$time_taken = $end_time - $start_time; 

$time_taken = round($time_taken,5); 

echo '<p>Page generated in '.$time_taken.' seconds.</p>'; 

Also in meinem Fall, Es dauert etwa 5,2 Sekunden eine ganze Schleife füllen Sie alle Daten hinzuzufügen. Aber einige JSON-Dateien sind leer, so dass es nur 1,4 Sekunden dauert, um eine Schleife abzuschließen, wenn sie leer sind.

So möchte ich Millionen von Schleifen (Hinzufügen von Daten aus Millionen von JSON-Dateien). Wenn mein Code also rund um die Uhr läuft, brauche ich einen Monat, um meine Aufgabe zu erledigen.


Aber nachdem der Code für 90 Sekunden läuft, bekomme ich diesen Fehler: enter image description here

ich einen cron-Job bin mit der Aufgabe zu tun. Und es sieht so aus, als ob der Server den CRON-Job den gleichen Fehler gibt.

Also, ich möchte den CRON-Job machen, um alle 1 Minute zu laufen, so bekomme ich keine Zeitfehler.


Aber ich habe Angst vor dieser: Was passiert, wenn das Skript Daten in einer halben Zeilen hinzugefügt und 1 mintue bekommt über, und es keine Daten in andere Hälfte Zeilen hinzufügen. Dann nach dem Start der neuen Minute beginnt der Code von der nächsten $number.

Also, wenn ich kann break; aus der Schleife nach 53 Sekunden (Wenn der Code beginnt eine andere Schleife bei 52 Sekunden, dann brechen am Ende davon, das wird etwa 58-59 Sekunden sein).

Ich meine, ich werde die Pause setzen; Code kurz vor dem Schleifenende (vor }). So verlasse ich die Schleife nicht, während die Daten in die Hälfte der Zeilen eingefügt wurden.

+0

Ich denke, dass Sie Schlaffunktion an der Stelle der Bruchfunktion verwenden können. –

+0

Sleep-Funktion verzögern die Code-Ausführungszeit, richtig? Wie kann es mich von Server 500 Fehler speichern? @AvinashKumarSingh Bruder? –

Antwort

0

Ich denke, dass Ihre PHP max_execution_time gleich 90 Sekunden ist, können Sie max_execution_time von set_time_limit angeben, aber ich denke nicht, dass es ein guter Ansatz dafür ist.

Probieren Sie pcntl oder pthreads, es würde Ihnen eine Menge Zeit sparen.

Verwandte Themen