Signatur
Beschreibung
imap_ping() sendet einen PING-Befehl über die angegebene IMAP-Verbindung und prüft so, ob die Verbindung zum Mailserver noch gültig und aktiv ist. Gleichzeitig werden ausstehende Nachrichten und Benachrichtigungen des Servers abgerufen und verarbeitet, z. B. neue eingetroffene E-Mails.
Die Funktion eignet sich besonders für lang laufende Skripte oder Daemons, die eine persistente IMAP-Verbindung aufrechterhalten und regelmäßig prüfen müssen, ob der Server die Verbindung noch akzeptiert. Wenn imap_ping() false zurückgibt, muss die Verbindung neu aufgebaut werden.
Ein typischer Anwendungsfall ist das Polling einer Mailbox: Statt die Verbindung bei jedem Prüfzyklus zu schließen und neu aufzubauen, kann man mit imap_ping() kostengünstig prüfen, ob die bestehende Verbindung noch nutzbar ist, und gleichzeitig neue Nachrichten signalisiert bekommen.
Hinweis: Die Funktion gehört zur IMAP-Erweiterung und setzt eine zuvor mit imap_open() geöffnete Verbindung voraus. Ab PHP 8.1 wird das Verbindungs-Handle als Objekt vom Typ IMAP\Connection übergeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $imap Pflicht | IMAP\Connection | Eine aktive IMAP-Verbindungsressource, wie sie von imap_open() zurückgegeben wird. Ab PHP 8.1 ist der Typ IMAP\Connection. |
Rückgabewert
true zurück, wenn die Verbindung noch aktiv und funktionsfähig ist, andernfalls false.Beispiele
Verbindung prüfen und bei Bedarf neu aufbauen
<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheim');
if (!$imap) {
die('Verbindung konnte nicht geöffnet werden: ' . imap_last_error());
}
// Simuliere einen langen Prozess mit mehreren Iterationen
for ($i = 0; $i < 5; $i++) {
sleep(2); // Wartezeit simulieren
if (!imap_ping($imap)) {
echo "Verbindung unterbrochen – verbinde neu...\n";
imap_close($imap);
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheim');
if (!$imap) {
die('Neuverbindung fehlgeschlagen.');
}
echo "Neu verbunden.\n";
} else {
echo "Verbindung aktiv (Iteration $i).\n";
}
}
imap_close($imap);
Neue Nachrichten nach Ping erkennen
<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheim');
if (!$imap) {
die('Verbindung fehlgeschlagen.');
}
$vorherAnzahl = imap_num_msg($imap);
echo "Nachrichten vor Ping: $vorherAnzahl\n";
// Ping verarbeitet serverseitige Benachrichtigungen und aktualisiert den Status
if (imap_ping($imap)) {
$nachherAnzahl = imap_num_msg($imap);
echo "Nachrichten nach Ping: $nachherAnzahl\n";
if ($nachherAnzahl > $vorherAnzahl) {
echo ($nachherAnzahl - $vorherAnzahl) . ' neue Nachricht(en) eingegangen!\n';
} else {
echo "Keine neuen Nachrichten.\n";
}
} else {
echo "Verbindung ist nicht mehr aktiv.\n";
}
imap_close($imap);
// Wichtig · Fallstricke
Deprecation/Entfernung: Die IMAP-Erweiterung wurde mit PHP 8.4 als deprecated markiert und soll in einer zukünftigen PHP-Version entfernt werden. Für neue Projekte empfiehlt sich der Einsatz einer modernen Bibliothek wie ddeboer/imap oder Webklex/php-imap.
Ressourcenverbrauch: In lang laufenden Skripten sollte imap_ping() nicht zu häufig aufgerufen werden, da jeder Aufruf eine Netzwerkanfrage an den Server sendet.
Fehlerbehandlung: Wenn die Verbindung durch ein Timeout oder einen Netzwerkfehler unterbrochen wurde, gibt die Funktion false zurück. Mit imap_last_error() lässt sich der genaue Fehlergrund ermitteln.