Signatur
Beschreibung
get_resource_id() extrahiert den internen numerischen Bezeichner, den PHP jeder geöffneten Ressource (z. B. Datei-Handle, Datenbankverbindung, Bild-Handle) automatisch zuweist. Die Funktion ist der typsichere Nachfolger des Cast-Ausdrucks (int) $resource und macht die Absicht des Codes deutlich lesbarer.
Eine typische Anwendung ist das Nachverfolgen oder Protokollieren von Ressourcen, das Deduplizieren von Verbindungen in einem Pool oder das Vergleichen, ob zwei Variablen dieselbe zugrundeliegende Ressource referenzieren. Da PHP Ressourcen intern einfach als Integer-Handle verwaltet, erlaubt diese Funktion direkten, performanten Zugriff auf diesen Wert ohne Typ-Umwandlung.
Die Funktion akzeptiert ausschließlich einen Wert vom Typ resource. Wird ein anderer Typ übergeben, wirft PHP einen TypeError. Das unterscheidet sie vom alten Cast-Muster, das stillschweigend einen falschen Wert liefern konnte.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $resource Pflicht | resource | Eine gültige PHP-Ressource, z. B. ein Rückgabewert von fopen(), mysqli_connect() oder imagecreate(). |
Rückgabewert
Beispiele
Ressource-ID einer geöffneten Datei ermitteln
<?php
$handle = fopen('/tmp/beispiel.txt', 'w');
$id = get_resource_id($handle);
echo "Ressource-ID: " . $id . PHP_EOL;
fclose($handle);
Zwei Ressourcen auf Identität prüfen
<?php
$conn1 = fopen('/tmp/a.txt', 'w');
$conn2 = fopen('/tmp/b.txt', 'w');
$conn3 = $conn1; // Gleiche Ressource, nur eine weitere Referenz
echo "conn1 ID: " . get_resource_id($conn1) . PHP_EOL;
echo "conn2 ID: " . get_resource_id($conn2) . PHP_EOL;
echo "conn3 ID: " . get_resource_id($conn3) . PHP_EOL;
if (get_resource_id($conn1) === get_resource_id($conn3)) {
echo "conn1 und conn3 zeigen auf dieselbe Ressource." . PHP_EOL;
}
fclose($conn1);
fclose($conn2);
Vergleich mit dem alten Cast-Ansatz
<?php
$handle = fopen('/tmp/test.txt', 'w');
// Alt (funktioniert, aber implizit und fehleranfällig):
$idAlt = (int) $handle;
// Neu (typsicher, wirft TypeError bei falschem Typ):
$idNeu = get_resource_id($handle);
echo "Alt: $idAlt, Neu: $idNeu" . PHP_EOL;
fclose($handle);
// Wichtig · Fallstricke
Wichtig: Ressource-IDs sind nicht dauerhaft stabil. Nach dem Schließen einer Ressource mit z. B. fclose() kann PHP dieselbe ID für eine neu geöffnete Ressource vergeben. IDs sollten daher niemals über den Lebenszyklus der Ressource hinaus gespeichert oder verglichen werden.
Ab PHP 8.0 ist get_resource_id() die empfohlene Methode. Der Cast (int) $resource ist zwar weiterhin möglich, aber schlechter lesbar und liefert bei versehentlichem Übergeben anderer Typen keine Fehlermeldung.