Start · Sprachen · PHP · Referenz · is_resource

is_resource

Funktion

Prüft, ob eine Variable vom Typ <code>resource</code> ist und gibt <code>true</code> zurück, wenn die Variable eine gültige Ressource darstellt.

seit PHP 4.0.0 Kategorie: type

Signatur

is_resource(mixed $value): bool

Beschreibung

is_resource() prüft, ob der übergebene Wert eine PHP-Ressource (resource) ist. Ressourcen sind spezielle Variablen, die Referenzen auf externe Ressourcen wie Dateihandles, Datenbankverbindungen oder Netzwerk-Sockets halten.

Die Funktion gibt true zurück, solange die Ressource geöffnet und aktiv ist. Wurde eine Ressource bereits mit einer entsprechenden Schließfunktion (z. B. fclose(), mysqli_close()) freigegeben, gibt is_resource() false zurück, da die Variable dann den Typ resource (closed) annimmt.

Typische Einsatzgebiete sind die Validierung vor der Verwendung einer Ressource, beispielsweise um sicherzustellen, dass eine Datei erfolgreich geöffnet wurde, bevor Lese- oder Schreiboperationen durchgeführt werden. Dies hilft, Laufzeitfehler zu vermeiden.

Hinweis: In modernem PHP (ab 8.0) ersetzen viele Erweiterungen ressourcebasierte APIs durch echte Objekte (z. B. gibt mysqli_connect() ein mysqli-Objekt zurück). Für solche Objekte gibt is_resource() immer false zurück; hier sollte stattdessen instanceof oder is_object() verwendet werden.

Parameter

Name Typ Default Beschreibung
$value Pflicht mixed Der zu prüfende Wert. Es kann ein beliebiger PHP-Ausdruck übergeben werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn value eine aktive, geöffnete Ressource ist. Gibt false zurück, wenn der Wert keine Ressource ist oder die Ressource bereits geschlossen wurde.

Beispiele

Dateihandle auf Gültigkeit prüfen

<?php
$handle = fopen('example.txt', 'w');

if (is_resource($handle)) {
    echo "Datei erfolgreich geöffnet, Typ: " . get_resource_type($handle) . PHP_EOL;
    fwrite($handle, 'Hallo Welt');
    fclose($handle);
} else {
    echo "Datei konnte nicht geöffnet werden." . PHP_EOL;
}

// Nach fclose() ist die Ressource geschlossen
var_dump(is_resource($handle)); // bool(false)
Datei erfolgreich geöffnet, Typ: stream bool(false)

Unterschied zwischen offener und geschlossener Ressource

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

var_dump(is_resource($fp));  // true — Ressource ist offen

fclose($fp);

var_dump(is_resource($fp));  // false — Ressource ist geschlossen
var_dump(get_resource_type($fp)); // Gibt 'Unknown' oder Warning aus
bool(true) bool(false) string(7) "Unknown"

Modernes PHP: Objekt statt Ressource (mysqli)

<?php
// Ab PHP 8.1 gibt mysqli_connect() ein Objekt zurück, keine Ressource
$conn = mysqli_connect('localhost', 'user', 'pass', 'db');

// is_resource() ist hier NICHT geeignet
var_dump(is_resource($conn)); // bool(false)

// Stattdessen: instanceof oder is_object() verwenden
var_dump($conn instanceof mysqli); // bool(true)
bool(false) bool(true)

// Wichtig · Fallstricke

Geschlossene Ressourcen: Nachdem eine Ressource mit der zugehörigen Schließfunktion freigegeben wurde, gibt is_resource() false zurück. Die Variable selbst existiert noch, hat aber den internen Typ resource (closed). Dies kann zu unerwartetem Verhalten führen, wenn man lediglich auf isset() prüft, da dieses weiterhin true liefert.

Veraltete Ressource-APIs: Viele PHP-Erweiterungen migrieren ihre APIs von ressourcebasierten Rückgabewerten hin zu echten PHP-Objekten. Dies betrifft z. B. GdImage (ab PHP 8.0 statt resource), OpenSSLCertificate und andere. Bei solchen APIs führt is_resource() zu falschen Ergebnissen und sollte durch typspezifische Prüfungen ersetzt werden.