2012-04-13 17 views
0

Wie kann ich Text ausgeben, wenn mein Skript fertig geladen ist?Anzeigen des "Fertig" -Text, sobald das PHP-Skript ausgeführt wird

Mein Skript für eine Liste von URLs Meta-Daten bekommt, was ich passieren soll, ist:

Klicken Sie auf Start und Text sagt übertragen Wenn Script beendet sagt es

Finished

Das kann ein Benutzer den Export-Knopf klicken und nimm die Daten!

+4

fügen Sie ein 'echo 'fertig';' am Ende Ihrer Datei ?! –

+1

können Sie auch etwas über Ajax lesen – gosukiwi

+0

Ich kann Echo am Ende nicht beenden, weil ich das oben auf der Seite zeigen müssen :( – RuFFCuT

Antwort

1

Sie können dies aufgrund der Art, wie PHP und das Web funktionieren, nicht wirklich tun. Im Grunde wird die Ausgabe von PHP gepuffert, bevor sie an den Client gesendet wird. Selbst wenn Sie print "Finished" am Ende Ihres Skripts setzen, wird der Client auf eine Antwort warten, bis das gesamte Skript beendet ist, und dann ist die gesamte Ausgabe sofort angezeigt.

Es gibt auch das Skript-Zeitlimit, was bedeutet, dass wenn Ihr Skript länger als die konfigurierte Zeit bis zur Fertigstellung dauert (standardmäßig 30 Sekunden), es abgebrochen wird und eine Fehlermeldung an den Client gesendet wird.

Die eleganteste Lösung besteht darin, die eigentliche Arbeit außerhalb Ihres Skripts auszuführen (wenn es länger als eine Minute dauert, sollten Sie einen Cron-Job verwenden) und eine Datei oder eine Datenbank für die Kommunikation zwischen Ihrem Skript und dem Cron-Job verwenden . Also, was Sie tun würden, dann ist:

  1. Skripte fügen Daten zu Verarbeitungswarteschlange und zeigt „Laden, bitte warten“
  2. Cron-Job nimmt Daten auf und beginnt die Verarbeitung, die Aktualisierung ein ‚Prozente getan‘ Feldes in der Warteschlange
  3. Skript lädt alle 10 Sekunden oder so mit JavaScript, Lesen des aktualisierten Status aus der Warteschlange und Anzeige
  4. Wenn der Job beendet ist, markiert der Cron-Job den Job in der Warteschlange und geht schlafen, bis mehr Jobs sind verfügbar; Das Skript sieht, dass der Job erledigt ist, zeigt "Beendet" an und beendet das erneute Laden.

Dies ist die Grundeinstellung; Für eine komfortablere Benutzererfahrung möchten Sie wahrscheinlich eine Art von Ajax-Heartbeat anstelle des ständigen Neuladens verwenden.

Verwandte Themen