Im Allgemeinen wünscht sie sich, dass die eigenen PHP-Scripte möglichst schnell ausgeführt werden – schließlich sollen die Besucher einer Web-Seite nicht unnötig lange auf die Inhalte warten. Es gibt aber Anlässe, die Ausführung eines Scripts bewusst zu verzögern: Sei es, um Downloads zu bremsen (und so Bandbreite zu sparen), oder um besondere Effekte (beispielsweise bei Spielen) zu erzielen.
Eine Verzögerung um eine bestimmte Zeitspanne kann in PHP mit der Funktion sleep() erreicht werden.
Der Syntax:
sleep(Sekunden)
Der Parameter gibt die Dauer in Sekunden an, um welche die Ausführung verzögert werden soll. Abgesehen von der Verzögerung hat ein Aufruf der Funktion sleep() keine weiteren Auswirkungen. Das folgende Beispiel zeigt den Effekt der Funktion.
Beispiel:
<?php
echo 'Script Start: '.date('h:i:s') . ' Uhr<br>';
sleep(5);
echo 'Script Ende: '.date('h:i:s') . ' Uhr<br>';
?>
In der ersten Zeile des Script wird die aktuelle Uhrzeit ausgegeben. Anschließend wird die Funktion sleep() aufgerufen, gefolgt von einer weiteren Ausgabe der Uhrzeit.
Ausgabe*:
Script Start: 10:23:51 Uhr
Script Start: 10:23:56 Uhr
Wie die Ausgabe erkennen lässt, liefert der zweite Aufruf der Funktion date() eine Uhrzeit, die fünf Sekunden nach dem Ergebnis des ersten Aufrufs liegt. Diese fünf Sekunden Unterschied werden durch den Aufruf von sleep() mit dem Parameter „5“ erreicht.
Wie oben erwähnt, können Sie mit der Funktion sleep() bei Downloads von ihrer Web-Seite die Geschwindigkeit beschränken, mit der die Benutzer Dateien abrufen können. Das kann sinnvoll sein, wenn Sie für das Hosting Ihrer Seite den Datenverkehr nach Menge bezahlen müssen. Fügen Sie am Anfang Ihres Scripts einen Aufruf der Funktion ein, der den Ablauf geeignet verzögert. Dieses Schema lässt sich verfeinern, indem die Verzögerungsdauer an die aktuelle Belastung des Web-Servers angepasst wird: Durch das Mitzählen der Seitenaufrufe kann ermittelt werden, wie viele Seiten pro Sekunde ausgeliefert werden, und dann sollte beim Überschreiten eines Grenzwertes die Verzögerungszeit erhöht werden.
* = Die genaue Ausgabe hängt natürlich davon, um welche Uhrzeit Sie das Beispiel aufgerufen wurde.
Beispiel für einen Countdown
<?php
/* Definiere die Startzeit des Countdowns in Sekunden */
$intStartzeit = time();
/* Definiere die Dauer des Countdowns in Sekunden */
$intDauer = 4;
/* Berechne die Endzeit des Countdowns */
$intEndzeit = $intStartzeit + $intDauer;
/* Schleife für den Countdown */
while (time() < $intEndzeit) {
/* Berechne verbleibende Zeit in Sekunden */
$intVerbleibendeZeit = $intEndzeit - time();
/* Formatiere die verbleibende Zeit für die Anzeige */
$strAnzeigezeit = gmdate("H:i:s", $intVerbleibendeZeit);
/* Gib den Countdown aus */
echo "Countdown: $strAnzeigezeitn";
/* Warte eine Sekunde, bevor der nächste Schleifendurchlauf erfolgt */
sleep(1);
}
/* Gib eine Meldung aus, wenn der Countdown abgeschlossen ist */
echo "Countdown abgeschlossen!";
?>
Ausgabe:
Countdown: 00:00:04
Countdown: 00:00:03
Countdown: 00:00:02
Countdown: 00:00:01
Countdown abgeschlossen!
Erklärung des Countdowns Beispiel
Der gegebene PHP-Code implementiert einen Countdown, der eine bestimmte Zeit lang läuft und dann eine Meldung ausgibt, wenn der Countdown abgeschlossen ist.
-
Startzeit definieren: Die Variable $intStartzeit
speichert den Zeitpunkt, zu dem der Countdown gestartet wird, in Sekunden seit dem 1. Januar 1970 (Unix-Zeitstempel), der durch die Funktion time()
erhalten wird.
-
Dauer definieren: Die Variable $intDauer
definiert die Dauer des Countdowns in Sekunden.
-
Endzeit berechnen: Die Variable $intEndzeit
berechnet den Zeitpunkt, zu dem der Countdown endet, indem sie die Startzeit ($intStartzeit
) um die Dauer des Countdowns ($intDauer
) erhöht.
-
Countdown-Schleife: Eine while
-Schleife wird gestartet, die so lange läuft, wie die aktuelle Zeit kleiner als die Endzeit ist. Innerhalb dieser Schleife wird der Countdown aktualisiert und ausgegeben.
a. Verbleibende Zeit berechnen: Die Variable $intVerbleibendeZeit
berechnet die verbleibende Zeit des Countdowns, indem sie die Endzeit ($intEndzeit
) minus die aktuelle Zeit (time()
) subtrahiert.
b. Verbleibende Zeit formatieren: Die Funktion gmdate()
formatiert die verbleibende Zeit ($intVerbleibendeZeit
) in Stunden, Minuten und Sekunden ("H:i:s"
).
c. Countdown ausgeben: Die verbleibende Zeit wird als Countdown ausgegeben.
d. Warten: Die Funktion sleep(1)
pausiert den Code für eine Sekunde, bevor der nächste Schleifendurchlauf erfolgt.
-
Meldung bei Abschluss: Nachdem der Countdown beendet ist (wenn die Schleifenbedingung nicht mehr erfüllt ist), wird die Meldung „Countdown abgeschlossen!“ ausgegeben.
Der Code ermöglicht es, einen einfachen Countdown in PHP zu implementieren und auf der Konsole auszugeben.
Beispiel 3
<?php
/* Funktion: Überprüft, ob eine Datei erfolgreich heruntergeladen wurde, bevor sie weiterverarbeitet wird */
function heruntergeladeneDateiVerarbeiten(array $arrDateiPfad): void {
/* Schlafe für 5 Sekunden, um sicherzustellen, dass die Datei heruntergeladen wurde */
sleep(5);
/* Durchlaufe jedes Element im Array */
foreach ($arrDateiPfad as $strDateiPfad) {
/* Überprüfe, ob die Datei existiert */
if (file_exists($strDateiPfad)) {
/* Datei existiert, weiterverarbeiten */
echo "Die Datei '$strDateiPfad' wurde erfolgreich heruntergeladen und wird nun weiterverarbeitet." . PHP_EOL;
} else {
/* Datei existiert nicht, Fehlermeldung ausgeben */
echo "Fehler: Die Datei '$strDateiPfad' konnte nicht gefunden werden." . PHP_EOL;
}
}
}
/* Beispielaufruf der Funktion mit einem Array von Dateipfaden */
$arrDateiPfade = ["downloads/meineDatei1.txt", "downloads/meineDatei2.txt"];
heruntergeladeneDateiVerarbeiten($arrDateiPfade);
?>
Ausgabe:
Fehler: Die Datei 'downloads/meineDatei1.txt' konnte nicht gefunden werden.
Fehler: Die Datei 'downloads/meineDatei2.txt' konnte nicht gefunden werden.
Der bereitgestellte PHP-Code definiert eine eigene Funktion namens heruntergeladeneDateiVerarbeiten
, die dazu dient, zu überprüfen, ob eine Datei erfolgreich heruntergeladen wurde, bevor sie weiterverarbeitet wird.
Hier ist eine ausführliche Erklärung des Codes:
-
Funktionsdefinition (function heruntergeladeneDateiVerarbeiten(array $arrDateiPfad): void
):
- Die Funktion wird mit dem Schlüsselwort
function
definiert. - Der Funktionsname lautet
heruntergeladeneDateiVerarbeiten
. - Sie erwartet ein Array von Dateipfaden als Parameter, der mit
$arrDateiPfad
bezeichnet wird. - Der Rückgabetyp der Funktion ist
void
, was bedeutet, dass die Funktion keinen Wert zurückgibt.
-
Schlafe für 5 Sekunden (sleep(5)
):
- Mit der Funktion
sleep(5)
wird das Programm für 5 Sekunden pausiert. Dies dient dazu sicherzustellen, dass die Datei während dieses Zeitraums heruntergeladen wird.
-
Dateiüberprüfung im Array (foreach ($arrDateiPfad as $strDateiPfad)
):
- Die Funktion durchläuft jedes Element im übergebenen Array von Dateipfaden mit einer
foreach
-Schleife. - Jeder Dateipfad wird in der Schleife als
$strDateiPfad
bezeichnet.
-
Überprüfung der Dateiexistenz (file_exists($strDateiPfad)
):
- Für jeden Dateipfad wird überprüft, ob die Datei tatsächlich existiert, indem die Funktion
file_exists()
aufgerufen wird. - Wenn die Datei existiert, wird eine Erfolgsmeldung ausgegeben. Andernfalls wird eine Fehlermeldung ausgegeben.
-
Ausgabe der Ergebnisse (echo
):
-
Beispielaufruf der Funktion:
- Nach der Funktionsdefinition wird die Funktion mit einem Beispielaufruf verwendet.
- Ein Array von Dateipfaden wird erstellt und an die Funktion übergeben.