Start · Sprachen · PHP · Referenz · imap_is_open

imap_is_open

Funktion

Prüft, ob ein <code>IMAP\Connection</code>-Objekt noch eine aktive, gültige Verbindung darstellt.

seit PHP 8.1.0 Kategorie: http

Signatur

imap_is_open(IMAP\Connection $imap): bool

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

Typ
bool
Beschreibung
Gibt 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);
Anzahl Nachrichten im Postfach: 42

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);
Verbindung verloren – stelle neu her... Verbindung wiederhergestellt. Nachrichten: 42

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