Start · Sprachen · PHP · Referenz · get_resources

get_resources

Funktion

Gibt ein Array aller aktuell aktiven Ressourcen-Handles zurück, optional gefiltert nach einem bestimmten Ressourcentyp.

seit PHP 7.0.0 Kategorie: misc

Signatur

get_resources(string $type = null): array

Beschreibung

get_resources() liefert eine Liste aller im aktuellen PHP-Prozess noch offenen (aktiven) Ressourcen. Ressourcen (resource) sind spezielle PHP-Werte, die externe Objekte wie Datei-Handles, Datenbankverbindungen oder Stream-Handles repräsentieren.

Die Funktion eignet sich hervorragend zur Diagnose und zum Debugging: Man kann damit prüfen, ob im Verlauf eines Skripts Ressourcen offen geblieben sind, die bereits geschlossen hätten sein sollen (z. B. vergessene fclose()-Aufrufe oder nicht geschlossene Datenbankverbindungen).

Wird der optionale Parameter $type angegeben, werden nur Ressourcen des entsprechenden Typs zurückgegeben. Den Typ einer Ressource ermittelt man mit get_resource_type(). Ohne Parameter werden alle aktiven Ressourcen zurückgegeben.

Das zurückgegebene Array ist assoziativ: Die Schlüssel entsprechen der internen Ressourcen-ID (Integer), die Werte sind die Ressourcen selbst. Hinweis: Ab PHP 8.0 wurden viele klassische Ressourcen durch echte Objekte ersetzt (z. B. GdImage), weshalb die Zahl der über get_resources() sichtbaren Handles zurückgegangen ist.

Parameter

Name Typ Default Beschreibung
$type string|null null Optionaler Ressourcentyp als String, z. B. 'stream', 'mysql link' oder 'curl'. Wird null übergeben oder der Parameter weggelassen, werden alle aktiven Ressourcen zurückgegeben.

Rückgabewert

Typ
array
Beschreibung
Ein assoziatives Array, dessen Schlüssel die interne Ressourcen-ID (Integer) und deren Werte die jeweiligen Ressourcen-Handles sind. Sind keine passenden Ressourcen vorhanden, wird ein leeres Array zurückgegeben.

Beispiele

Alle offenen Ressourcen auflisten

<?php
// Eine Datei öffnen
$fh = fopen('php://temp', 'r+');

// Alle aktiven Ressourcen ermitteln
$resources = get_resources();

foreach ($resources as $id => $resource) {
    echo 'ID: ' . $id . ' — Typ: ' . get_resource_type($resource) . PHP_EOL;
}

fclose($fh);
ID: 1 — Typ: stream ID: 2 — Typ: stream ID: 3 — Typ: stream ID: 4 — Typ: stream

Nur Ressourcen eines bestimmten Typs (Streams) abrufen

<?php
$fh1 = fopen('php://temp', 'r+');
$fh2 = fopen('php://memory', 'r+');

// Nur Stream-Ressourcen abrufen
$streams = get_resources('stream');

echo 'Anzahl offener Streams: ' . count($streams) . PHP_EOL;

foreach ($streams as $id => $stream) {
    echo 'Stream-Ressource ID: ' . $id . PHP_EOL;
}

fclose($fh1);
fclose($fh2);

// Nach dem Schließen sollten die Handles verschwunden sein
$streams_after = get_resources('stream');
echo 'Streams nach fclose: ' . count($streams_after) . PHP_EOL;
Anzahl offener Streams: 6 Stream-Ressource ID: 1 Stream-Ressource ID: 2 ... Streams nach fclose: 4

// Wichtig · Fallstricke

PHP 8.0+: Viele ehemals als Ressource implementierte Handles wurden in echte PHP-Objekte umgewandelt (z. B. GdImage, OpenSSLCertificate, CurlHandle). Diese erscheinen nicht mehr in der Ausgabe von get_resources(). Die Funktion ist daher für Diagnose-Zwecke in modernem PHP-Code weniger umfassend als in älteren Versionen.

Die Funktion ist primär für Debugging und Profiling gedacht und sollte nicht in produktivem Anwendungscode zur Steuerung der Programmlogik verwendet werden. Für Unit-Tests kann sie nützlich sein, um Ressourcen-Leaks zu erkennen.