2017-04-14 5 views
1

ich PHP-Code haben alle 10 Sekunden, aber mein Code ausführen möchte ein ProblemPHP: laufen PHP-Code alle 10 Sekunden

Da Funktionen sind zufällige Verzögerung (2 Sekunden bis 5 Sekunden)

ich genau ausgeführt werden soll Code auf 10 Sekunden und geht dann funktionieren, wenn Zeit oder, wenn mehr 5 Sekunden

Code:

for($i=0;$i<=5;$i++){ 
    echo date('Y-m-d H:i:s').'<br />'; 
    get_file_content('....'); //load file from server (make 2 seconds until 5 seconds) 
    sleep(10); // sleep for 10 seconds 
} 

1:

2017-04-14 15:25:35 
2017-04-14 15:25:46 
2017-04-14 15:25:57 
2017-04-14 15:26:08 
2017-04-14 15:26:19 
2017-04-14 15:26:30 

Ein weiteres Ergebnis:

2017-04-14 15:32:22 
2017-04-14 15:32:34 
2017-04-14 15:32:44 
2017-04-14 15:33:01 
2017-04-14 15:33:17 
2017-04-14 15:33:29 

ich dieses Ergebnis erhalten möchten (auch eine lange Zeit machen Last-Datei)

Exakt Ergebnis:

2017-04-14 15:25:00 
2017-04-14 15:25:10 
2017-04-14 15:25:20 
2017-04-14 15:25:30 
2017-04-14 15:25:40 
2017-04-14 15:25:50 
+3

über Cronjobs Denken. – tilz0R

+0

Ich benutze Cron-Jobs, aber mein Server ist auf 1 Minute –

Antwort

2

Wie wäre es etwas in den Zeilen :

for($i=0;$i<=5;$i++){ 
$previousTime = date(); 
echo date('Y-m-d H:i:s').'<br />'; 
get_file_content('....'); //load file from server (make 2 seconds until 5 seconds) 
sleep(10-(date()-$previousTime)); 
} 
+0

Dankeschön. Wenn file_get_content länger als 10 Sekunden geladen wird? –

+0

Dann 'Ich möchte PHP-Code alle 10 Sekunden ausführen, aber mein Code ein Problem haben 'muss ein bisschen besser definiert werden. – fzd

0

Berechnen Sie einfach, wie lange die file_get_contents dauerte.

echo date('Y-m-d H:i:s').'<br />'; 
$start = time(); 
get_file_content('....'); //load file from server (make 2 seconds until 5 seconds) 
$end = time(); 
$diff = $end - $start; 
if ($diff < 10) sleep(10 - $diff); // sleep for (10 - the amount how long the get took) seconds 
// Skip if longer than 10 
0

versuchen, Zeit zu zählen, benötigt Ihre Funktion

for($i=0;$i<=5;$i++){ 
    echo date('Y-m-d H:i:s').'<br />'; 
    $start = time(); 
    get_file_content('....'); //load file from server (make 2 seconds until 5 seconds) 
    $time_elapsed = time() - $start; 
    if ($time_elapsed>0 || $time_elapsed<=10) sleep(10- $time_elapsed); 
} 

für eine genauere, microtime verwenden auszuführen.

0

Ich finde Lösung:

$context = array('http' => array('timeout' => 10)); 
$data = file_get_contents('...',false,stream_context_create($context)); 
Verwandte Themen