Signatur
Beschreibung
imap_is_open() ermöglicht es, vor dem Ausführen weiterer IMAP-Operationen zu prüfen, ob eine bestehende Verbindung noch aktiv und nutzbar ist. Dies ist besonders nützlich in langlebigen Skripten oder bei Verbindungen, die durch Timeouts, Netzwerkfehler oder serverseitige Trennungen ungültig werden könnten.
Die Funktion wurde mit PHP 8.1 eingeführt, als das bisherige IMAP-Ressourcen-Handle (resource) durch das typsichere IMAP\Connection-Objekt ersetzt wurde. Ein IMAP\Connection-Objekt kann technisch noch existieren, selbst wenn die zugrunde liegende Verbindung bereits geschlossen wurde – zum Beispiel nach einem Aufruf von imap_close(). imap_is_open() liefert in solchen Fällen false.
Der typische Einsatz ist eine Vorab-Prüfung vor IMAP-Operationen, um Fehler zu vermeiden und ggf. eine Neuverbindung herzustellen. Die Funktion eignet sich auch gut in Wrapper-Klassen oder Bibliotheken, die IMAP-Verbindungen verwalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $imap Pflicht | IMAP\Connection | Ein IMAP\Connection-Objekt, das von imap_open() oder imap_reopen() zurückgegeben wurde und auf seine Gültigkeit geprüft werden soll. |
Rückgabewert
true zurück, wenn die Verbindung noch aktiv und gültig ist, andernfalls false – zum Beispiel wenn die Verbindung bereits mit imap_close() geschlossen wurde.Beispiele
Verbindung prüfen vor dem Abruf von Nachrichten
<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheim');
if ($imap === false) {
die('Verbindung konnte nicht hergestellt werden.');
}
// Prüfen, ob die Verbindung noch aktiv ist
if (imap_is_open($imap)) {
$anzahl = imap_num_msg($imap);
echo "Anzahl Nachrichten im Postfach: " . $anzahl . PHP_EOL;
} else {
echo "Verbindung ist nicht mehr aktiv." . PHP_EOL;
}
imap_close($imap);
Automatische Neuverbindung nach Verbindungsabbruch
<?php
function getImapConnection(string $mailbox, string $user, string $pass): IMAP\Connection {
$conn = imap_open($mailbox, $user, $pass);
if ($conn === false) {
throw new RuntimeException('IMAP-Verbindung fehlgeschlagen: ' . imap_last_error());
}
return $conn;
}
$mailbox = '{imap.example.com:993/imap/ssl}INBOX';
$imap = getImapConnection($mailbox, 'user@example.com', 'geheim');
// Simuliertes Schließen der Verbindung
imap_close($imap);
// Prüfen und ggf. neu verbinden
if (!imap_is_open($imap)) {
echo "Verbindung verloren – stelle neu her..." . PHP_EOL;
$imap = getImapConnection($mailbox, 'user@example.com', 'geheim');
}
$anzahl = imap_num_msg($imap);
echo "Verbindung wiederhergestellt. Nachrichten: " . $anzahl . PHP_EOL;
imap_close($imap);
// Wichtig · Fallstricke
Verfügbarkeit: imap_is_open() ist erst ab PHP 8.1.0 verfügbar, da es das neue IMAP\Connection-Objekt voraussetzt. In älteren PHP-Versionen (bis 8.0) wurde ein einfaches Ressourcen-Handle verwendet, für das diese Funktion nicht existiert.
Erweiterung erforderlich: Die IMAP-Funktionen benötigen die PHP-Erweiterung ext-imap, die nicht standardmäßig aktiviert ist und bei einigen Distributionen separat installiert werden muss.
Kein Ersatz für Fehlerbehandlung: imap_is_open() prüft nur den internen Verbindungsstatus des Objekts. Eine tatsächliche Netzwerkprüfung zum Mailserver findet nicht statt. Für eine zuverlässige Fehlerbehandlung sollten IMAP-Operationen weiterhin auf Rückgabewert und imap_errors() geprüft werden.