Signatur
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
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);
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);
// 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.