PHP ist eine serverseitige Skriptsprache. Wenn Sie überprüfen müssen, ob bereits etwas auf der Clientseite geladen wurde, benötigen Sie eine clientseitige Skriptsprache wie JavaScript .
Möglicherweise müssen Sie jQuery für Ihren Zweck verwenden , um die Dinge zu vereinfachen.
jQuery ist ein schnelles und prägnantes JavaScript Bibliothek, die HTML-Dokumente vereinfacht Traversieren, Ereignisbehandlung, Animation, und Ajax-Interaktionen für schnelles Web Entwicklung. jQuery wurde entwickelt, um ändere die Art, wie du schreibst JavaScript.
Laden Sie zuerst jQuery herunter. Fügen Sie im head-Tag Ihres HTML-Codes Folgendes hinzu:
%Vor%Fügen Sie im Hauptteil Ihres HTML Folgendes hinzu:
%Vor%Nicht wirklich, nein. 10 Sekunden nachdem Ihre Seite geladen wurde (mindestens) 10 Sekunden nachdem Ihr PHP-Skript beendet wurde, dh läuft es nicht mehr (abgesehen von Tricks, die versuchen, die Verbindung offen zu halten, was ich nicht glaube arbeite für eine zeit so lange wie 10 sekunden)!
Daher müssen Sie entweder einen Job cron
auf der Serverseite planen, um ihn in 10 Sekunden auszulösen, oder Sie benötigen einen Rückruf von der Website mit AJAX.
Wenn ich Ihre Frage wie folgt interpretiere: "Meine Seite benötigt viel Zeit zum Generieren, kann ich jetzt alle 10 Sekunden eine PHP-Funktion aufrufen, während sie generiert wird", dann gibt es mehrere Möglichkeiten, wie Sie das erreichen können ...
Es ist möglich, eine Technik wie diese zu verwenden, um einen Fortschrittsmesswert für lang laufende Operationen zu implementieren, indem Sie Ihre "Tick" -Funktion etwas Javascript ausgeben lassen, um den HTML-Code zu aktualisieren, der eine Fortschrittsanzeige darstellt.
Alternativ können Sie, wenn Sie die Prozesssteuerung Unterstützung in Ihrem PHP-Build aktiviert haben kann möglicherweise pcntl_alarm verwenden, um nach Ablauf einer bestimmten Zeit einen Signal-Handler aufzurufen.
Sie können das deklarieren Konstrukt zusammen mit register_tick_function , damit die PHP-Engine Ihre Funktion alle x 'Ticks' aufruft. Aus dem Handbuch:
Ein Häkchen ist ein Ereignis, für das ein Fehler auftritt jede N auf niedriger Ebene anklickbare Anweisungen ausgeführt vom Parser innerhalb der Block deklarieren. Der Wert für N ist angegeben mit Ticks = N innerhalb der deklariere den Direktiven-Abschnitt von blocks.
Das scheint eine seltsame Idee zu sein, aber vielleicht ist es das, wonach Sie suchen, wenn Sie es in PHP machen wollen, ohne HTML / JS zu berühren:
%Vor%Das Obige ist in der Theorie OK, aber in der Praxis wird es zu einer sehr speicherintensiven App führen. Also sei gewarnt.
Und bitte, lehne mich nicht ab, das ist nur ein theoretischer Streit.
Wenn Sie es wirklich innerhalb desselben PHP-Skripts tun müssen, wäre der sauberste Weg eine Verzweigung .
Oder wenn das nicht möglich ist, hier ist ein wirklich hässlicher Weg, es zu tun:
%Vor%Wenn Sie dies tun, um Dinge nach einer Verzögerung an den Benutzer auszugeben, kann das obige funktionieren , aber es ist eine wirklich hässliche Art, es zu tun. Verwenden Sie stattdessen AJAX.
Es gibt keine Möglichkeit, es mit PHP zu machen, außer vielleicht crontab / loop mit sleep () und file_get_contents () zu benutzen. Oder benutze Javascript / Ajax wie zuvor erwähnt.
Ich wollte das Gleiche tun, um bei jedem Schlag meines Lebenslaufs benachrichtigt zu werden. Mit flush () nachdem alle Daten gesendet wurden, dann die DB- und Mail-Operationen: die Seite auf dem Client wird vollständig gerendert, aber die Download-Fortschrittsleiste ist noch vorhanden, bis das Skript vollständig beendet ist.
Ich wollte die ganze Sache serverseitig behalten (damit die generierte HTML-Datei auch ohne Fehler fehlerfrei offline verwendbar ist), also war JS keine Option.
Ich beendete schließlich einfach eine Zeile mit Parametern an eine Textdatei, fügte jeder Minute einen Cron-Job hinzu, der diese Dateigröße mit der zuletzt gesendeten Version vergleicht, und dieses Bash-Skript verarbeitet alle langen Funktionen, während die 9k-Seite noch geladen und gerendert wird in einem Bruchteil einer Sekunde.
Leider hat diese Methode immer noch eine Verzögerung von bis zu 1 Minute, aber immer noch einfach:
%Vor%Und die Seite befindet sich bei: Ссылка , der PHP-Code ist nichts anderes als diese 3 Zeilen am Ende des zuvor einfachen HTML Datei:
%Vor%Wenn ich eine fast verzögerte (& lt; 1s) oder 10 Sekunden verzögerte Version machen wollte, würde ich wahrscheinlich einen Daemon anstelle eines Cron-Jobs und eine Art Interprozess-Kommunikation verwenden ein Listening-Socket, das das PHP-Skript zum Senden von Daten und zum Schließen (Fast) öffnen () würde, dann geht der Daemon mit langen Operationen von selbst weiter.
Tags und Links php