Start · Sprachen · PHP · Referenz · imap_gc

imap_gc

Funktion

Leert den IMAP-Cache der angegebenen Verbindung anhand der übergebenen Flags.

seit PHP 5.3.0 Kategorie: http

Signatur

imap_gc(IMAP\Connection $imap, int $flags): bool

Beschreibung

imap_gc() bereinigt den internen Cache einer IMAP-Verbindung. Der IMAP-Cache speichert temporär Nachrichteninformationen wie Nachrichtentexte, Kopfzeilen und strukturierte Nachrichtendaten, um wiederholte Serveranfragen zu vermeiden. Mit imap_gc() lässt sich dieser Cache gezielt oder vollständig leeren.

Die Funktion ist nützlich, wenn bei langen IMAP-Sitzungen der Speicherverbrauch reduziert werden soll oder wenn sichergestellt werden muss, dass beim nächsten Zugriff aktuelle Daten vom Server abgerufen werden. Über das $flags-Argument kann gesteuert werden, welche Cache-Bereiche geleert werden sollen.

Die verfügbaren Konstanten für $flags sind: IMAP_GC_ELT (Nachrichtenelemente), IMAP_GC_ENV (Envelope-Daten / Kopfzeilen) und IMAP_GC_TEXTS (Nachrichtentexte). Diese können mit dem bitweisen ODER-Operator | kombiniert werden.

Parameter

Name Typ Default Beschreibung
$imap Pflicht IMAP\Connection Eine aktive IMAP-Verbindung, wie sie von imap_open() zurückgegeben wird.
$flags Pflicht int Bitmaske, die bestimmt, welche Cache-Bereiche geleert werden. Mögliche Werte: IMAP_GC_ELT, IMAP_GC_ENV, IMAP_GC_TEXTS oder eine Kombination davon mit |.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler.

Beispiele

Gesamten IMAP-Cache leeren

<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheimes_passwort');

if ($imap === false) {
    die('Verbindung fehlgeschlagen: ' . imap_last_error());
}

// Alle Cache-Bereiche leeren
$result = imap_gc($imap, IMAP_GC_ELT | IMAP_GC_ENV | IMAP_GC_TEXTS);

if ($result) {
    echo 'IMAP-Cache erfolgreich geleert.';
} else {
    echo 'Fehler beim Leeren des Caches.';
}

imap_close($imap);
IMAP-Cache erfolgreich geleert.

Nur Nachrichtentexte aus dem Cache entfernen

<?php
$imap = imap_open('{imap.example.com:993/imap/ssl}INBOX', 'user@example.com', 'geheimes_passwort');

if ($imap === false) {
    die('Verbindung fehlgeschlagen: ' . imap_last_error());
}

// Mehrere Nachrichten abrufen
$messages = imap_search($imap, 'ALL');
foreach ($messages as $msgno) {
    $body = imap_body($imap, $msgno);
    // Verarbeitung ...
}

// Nur gecachte Nachrichtentexte freigeben, um Speicher zu sparen
imap_gc($imap, IMAP_GC_TEXTS);
echo 'Nachrichtentexte aus Cache entfernt.';

imap_close($imap);
Nachrichtentexte aus Cache entfernt.

// Wichtig · Fallstricke

Hinweis zur Erweiterung: Die IMAP-Erweiterung ist ab PHP 8.1 ausgelagert und muss separat installiert werden (pecl install imap). Ab PHP 8.1 ist der Rückgabewert von imap_open() ein IMAP\Connection-Objekt statt einer resource.

Speicherverwaltung: Bei der Verarbeitung sehr vieler oder großer E-Mails in einer Schleife empfiehlt es sich, imap_gc() regelmäßig aufzurufen, um den PHP-Prozess-Speicher zu entlasten. Ohne Cache-Bereinigung kann der Speicherverbrauch bei langen Sitzungen erheblich ansteigen.