wie man eine Funktion in PHP nach 10 Sekunden des Ladens der Seite aufruft (ohne Verwendung von HTML)

8

Gibt es eine Möglichkeit, eine Funktion 10 Sekunden nach dem Laden der Seite in PHP aufzurufen? (Ohne HTML.)

    
Fero 26.08.2009, 09:24
quelle

12 Antworten

0

Dieser Code funktioniert. Bearbeitet aus der Antwort von randell.

%Vor%

Danke an rendell

    
Fero 26.08.2009, 10:51
quelle
19

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%     
Randell 26.08.2009 09:27
quelle
13

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.

    
Konrad Rudolph 26.08.2009 09:27
quelle
8

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 ...

Zeit deine Schleife, mach etwas nach 10 Sekunden Arbeit ...

%Vor%

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.

Verwendung von pcntl_alarm ...

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.

Ticks verwenden ...

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.

    
Paul Dixon 26.08.2009 10:55
quelle
8

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.

    
warpech 26.08.2009 11:36
quelle
4

Wenn Sie meinen, nachdem die Seite geladen wurde, müssen Sie javascript / ajax / jquery dazu verwenden.

    
Brian 26.08.2009 09:26
quelle
1

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.

    
flussence 26.08.2009 11:32
quelle
0

Sie können einen Javascript-Timer erstellen, der die Funktion alle zehn Sekunden aufruft.

Tutorial hier

(10 Sekunden sind 10000 Millisekunden)

    
Kablam 26.08.2009 09:27
quelle
0

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.

    
Deniss Kozlovs 26.08.2009 09:27
quelle
0

PHP ist eine Servide-Skriptsprache und kann nicht erkennen, ob die Seite geladen ist oder nicht. Also müssen Sie Client-Side-Skript Javascript verwenden.

    
Mohamed 26.08.2009 09:28
quelle
0

Der nächste Gedanke, den ich mir vorstellen kann, ist:

Sobald das Skript beendet ist, speichert es einen Eintrag in einer Datenbank mit der Uhrzeit. Dann wird ein Daemon (Cron-Stil) jede Sekunde in den Datenbanken ausgeführt, die älter als 10 Sekunden ist.

    
e-satis 26.08.2009 10:24
quelle
0

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.

    
Julien Marodon 15.12.2011 16:50
quelle

Tags und Links