2017-05-08 6 views
0

Ich muss ein PHP-Skript ausführen, ohne die Benutzeroberfläche zu blockieren.Asynchrone Skriptausführung PHP

Schauen Sie diese (Licht) Beispiel:

<?php 
    echo "user see this"; 
    header("Location:otherpage.php"); 

     sleep(10); 
     for($i=1; $i < 100000; $i++){ 
      $t = fopen("test.txt", "a+"); 
      fwrite($t, "$i\r\n"); 
      fclose($t); 
     } 
?> 

Dieses Beispiel braucht zu viel Zeit ausgeführt worden ist, wie es asynchron zu machen und die Benutzer-Schnittstelle witout wartet umleiten ???

+0

Warum verwenden Sie nicht jquery/ajax dafür? – dehood

+0

Was möchten Sie erreichen? Es gibt mehrere Möglichkeiten, um dieses Problem zu lösen – d3L

+0

Ich muss etwas in der Datenbank geschrieben (Position: warten), auf eine andere Seite verlagern, zeigen Warteprozess, Test mit Ajax, wenn Prozess ok, wenn ok, schrieb in Datenbank Erfolg statt warten, und Ersetzen Sie in der Benutzeroberfläche Warten durch Erfolg. – Azee

Antwort

0

fand ich ein Skript, die gemacht, was ich brauche, aber ich verstehe es nicht:

ignore_user_abort(true); 
set_time_limit(0); 

$strURL = "PUT YOUR REDIRCT HERE"; 
header("Location: $strURL", true); 
header("Connection: close", true); 
header("Content-Encoding: none\r\n"); 
header("Content-Length: 0", true); 

flush(); 
ob_flush(); 

session_write_close(); 

// Continue processing... 

sleep(100); 
exit; 

Jemand erklären kann?

+0

Wenn Sie den Standard 'session handler' von PHP verwenden, werden Sitzungen in einer Datei gespeichert, wodurch eine Dateisperre erzeugt wird Anfrage wird bearbeitet. Durch Schließen der Sitzung mit 'session_write_lock' schließen Sie die Dateisperre und Sie können eine zweite Anfrage starten, ohne auf die erste warten zu müssen. – DarkBee

+0

Warum negative vote ??? – Azee

+0

Ist das ein nettes Thema? – Azee