2010-08-08 10 views

Antwort

8

Es gibt keine Möglichkeit, die Ausführung eines Teils des Codes im aktuellen Skript zu verzögern. Es würde auch nicht viel Sinn machen, da die Verarbeitung eines PHP-Skripts vollständig auf der Serverseite stattfindet und Sie die gesamte Ausführung des Skripts verzögern würden. Es gibt sleep(), aber das wird den Prozess für eine bestimmte Zeit einfach anhalten.

Sie können natürlich ein PHP-Skript planen, das zu einem bestimmten Zeitpunkt mit Cron-Jobs und ähnlichem ausgeführt wird.

+0

Es ist ein wenig schwer zu erklären - was ich wollte, war genau das Skript anzuhalten :) Grundsätzlich möchte ich einen meiner Freunde "Streicheln". Ich habe eine Eingabe gemacht, in die du deinen Namen eingibst, und wenn du einen Chat einreichst, wird simuliert und um es realistischer zu machen, möchte ich die Nachrichten von dem Fremden, mit dem mein Freund "spricht", eins nach dem anderen erscheinen lassen was ich meine :) – Latze

+6

Timed-Events machen keinen Sinn, weil das Skript auf der Serverseite läuft? Ich folge dem Argument nicht. Sicherlich sind sie in PHP aufgrund des Fehlens von Nebenläufigkeit weniger nützlich, aber es ist von Vorteil, ein Skript zu haben, das nach einer bestimmten Zeit oder zu einem bestimmten Zeitpunkt etwas tut. – Artefacto

+2

@Latze das klingt nach etwas, das Sie mit JavaScript auf der Client-Seite tun möchten, nicht wahr? –

9

Es gibt die sleep Funktion, die das Skript für eine bestimmte Zeit pausiert.

Siehe auch usleep, time_nanosleep und time_sleep_until.

+0

wäre es immer noch schön, diese Art von Code in PHP zu simulieren: http://hastebin.com/rujakezuco.lisp. Schlaf blockiert, Timeouts nicht. – Dmitry

10

PHP ist nicht ereignisgesteuert, daher ist ein setTimeout nicht sinnvoll. Sie können es sicherlich nachahmen und in der Tat hat jemand eine Timer class geschrieben, die Sie verwenden könnten. Aber ich würde vorsichtig sein, bevor Sie auf diese Weise auf der Serverseite in PHP mit der Programmierung beginnen.

+1

Aber PHP hat die Werkzeuge, um Ihr spezifisches Skript ereignisgesteuert zu machen. Wenn Sie beispielsweise PHP über die Konsole ausführen, können Sie mehrere Ereignisse zu unterschiedlichen Zeiten planen. An diesem Punkt ist es sinnvoll, Timeouts zu verwenden. – Dmitry

2

Wenn Sie AJAX nicht mit live Anfragen verwenden, ist PHP nicht die bevorzugte Sprache für dieses Problem. PHP-Skripte tun nicht hang und warten auf eine andere Antwort. Sie sind nicht hartnäckig. Javascript wäre erforderlich.

Selbst für einen Streich wäre eine JavaScript AJAX-Funktion mit einem PHP-Skript gepaart, um die Eingabe zu analysieren und entsprechend zu reagieren wäre genau das, was Sie brauchen würden. Sie könnten dies sogar mit der Funktion sleep in PHP kombinieren, um es realistischer zu machen. Darüber hinaus würde ich eine Reihe verschiedener Anweisungen für den zu analysierenden Server vorbereiten. Sie könnten so weit gehen, um die für jede Anweisung erforderliche Zeit von sleep festzulegen. Zum Beispiel:

MYSQL DATABASE Beispiel:

| ID | SLEEP | STATEMENT             | 
| 1 | 3 | Hello              | 
| 2 | 10 | I have been alright, nothing new.       | 
| 3 | 20 | This is a really long message that takes 20 seconds to type | 

So könnte man es analysieren, wie folgt:

$query = mysql_query("SELECT * FROM `responses` WHERE `id`='3'"); 
$array = mysql_fetch_array($query); 
sleep((int)$array['sleep']); //convert sleep time to integer, sleep. 
die($array['statement']);  //print the statement back to AJAX function 
1

wenn Sie eine Aktion machen müssen, nachdem Sie einige PHP-Code ausführen können Sie es tun mit einem echo

echo "Success.... <script>setTimeout(function(){alert('Hello')}, 3000);</script>"; 

so nach einer zeit im client (browser) können sie etwas anderes tun, wie ein Umleiten zu einem anderen PHP-Skript zum Beispiel oder echo eine Warnung

1

http://php.net/manual/en/class.evtimer.php ist wahrscheinlich das, was Sie suchen, können Sie eine Funktion in festgelegten Intervallen aufgerufen haben, ähnlich setInterval in Javascript. es ist eine pecl-Erweiterung, wenn Sie whm/cpanel haben, können Sie es einfach über die pecl Software/Erweiterung Installer Seite installieren.

Ich hatte nicht bemerkt, dass diese Frage von 2010 ist und die Evtimer-Klasse begann 2012-2013 codiert werden.als update zu einer alten frage gibt es jetzt eine klasse, die das ähnlich wie javascripts settimeout/setinterval macht.

6

Ein paar Dinge, die ich über Timer in PHP beachten mag:

1) Timer in PHP sinnvoll, wenn in lang laufenden Skripte (Daemons und, vielleicht, in CLI-Skripte verwendet). Also Wenn Sie diese Art von Anwendung nicht entwickeln, dann brauchen Sie keine Timer.

2) Timer können blockierend und nicht blockierend sein. Wenn Sie sleep() verwenden, handelt es sich um einen Sperrzeitgeber, da Ihr Skript nur für eine bestimmte Zeit einfriert. Für viele Aufgaben sind blockierende Timer in Ordnung. Zum Beispiel senden Sie Statistiken alle 10 Sekunden. Es ist in Ordnung, um das Skript zu blockieren:

while (true) { 
    sendStat(); 
    sleep(10); 
} 

3) Non-Blocking-Timer nur Sinn in ereignisgesteuerte Anwendungen, wie websocket-Server zu machen. In solchen Anwendungen kann ein Ereignis jederzeit auftreten (z. B. eingehende Verbindung), also dürfen Sie Ihre App nicht mit sleep() (offensichtlich) blockieren. Zu diesem Zweck gibt es Event-Loop-Bibliotheken, wie reactphp/event-loop, die es Ihnen ermöglicht, mehrere Streams in einer nicht blockierenden Art und Weise zu behandeln und auch Timer/Intervall-Funktion.

4) Nicht blockierende Timeouts in PHP sind möglich. Es kann mit stream_select() Funktion mit Timeout-Parameter implementiert werden (siehe, wie es in reactphp/event-loop StreamSelectLoop::run() implementiert ist).

5) Es gibt PHP-Erweiterungen wie libevent, libev, event die Timer Implementierung ermöglichen (wenn Sie hardcore)

Verwandte Themen