get_resource_type()
La fonction get_resource_type() en PHP retourne le type d'une ressource donnée sous forme de string. Guide, exemples et mise en garde PHP 8.
Introduction
get_resource_type() est une fonction PHP intégrée qui retourne une string indiquant le type de ressource que contient une variable — par exemple "stream" pour un fichier ouvert, ou "process" pour un programme externe en cours d'exécution.
Une ressource est un type spécial de variable PHP qui contient une référence vers quelque chose vivant en dehors de PHP : un fichier ouvert, un socket réseau, une image en cours de construction en mémoire, un processus enfant, etc. L'objet sous-jacent étant opaque, il n'est pas possible de l'inspecter directement. get_resource_type() vous fournit un libellé lisible indiquant ce qu'est la ressource, ce qui est pratique pour la journalisation, le débogage et l'écriture de fonctions qui acceptent plusieurs types de ressources mais n'en gèrent que certains.
Cette page couvre la syntaxe, les strings de type de ressource que vous rencontrerez réellement, une mise en garde importante pour PHP 8 (de nombreuses anciennes « ressources » sont désormais des objets), ainsi que la manière d'utiliser la fonction en toute sécurité.
Syntaxe
get_resource_type(resource $handle): stringElle prend un seul paramètre :
$handle— la ressource dont vous souhaitez connaître le type. Il doit s'agir d'une valeur de ressource active.
Elle retourne une string en minuscules identifiant le type de ressource. Si vous passez quelque chose qui n'est pas une ressource, PHP 8 lève une TypeError (dans PHP 7, une alerte était émise et null était retourné).
Exemple de base
La ressource la plus courante que vous inspecterez est un descripteur de fichier/flux provenant de fopen() :
<?php
$file = fopen("php://memory", "w+");
echo get_resource_type($file), PHP_EOL; // stream
fclose($file);
?>Résultat :
streamphp://memory est un flux réel toujours disponible, ce qui permet d'exécuter cet exemple n'importe où sans avoir besoin d'un fichier sur le disque.
Strings de type de ressource courantes
Différentes fonctions créent différents types de ressources. En voici quelques-uns que vous rencontrerez probablement :
<?php
$file = fopen("php://memory", "r");
echo get_resource_type($file), PHP_EOL; // stream
$ctx = stream_context_create();
echo get_resource_type($ctx), PHP_EOL; // stream-context
$proc = proc_open("echo hi", [], $pipes);
echo get_resource_type($proc), PHP_EOL; // process
proc_close($proc);
?>Résultat :
stream
stream-context
processLes strings exactes proviennent de l'extension qui a créé la ressource ; ce sont donc des noms stables que vous pouvez comparer ("stream", "curl" sur les anciennes versions de PHP, "gd" pour les anciens descripteurs d'image, etc.).
Attention : PHP 8 a transformé de nombreuses ressources en objets
C'est le piège le plus important. Depuis PHP 8.0, plusieurs extensions ont migré leurs anciens types de ressources vers de véritables objets. Les descripteurs cURL, les connexions MySQLi, les images GD et d'autres ne sont plus des ressources — get_resource_type() lève donc désormais une TypeError sur ceux-ci :
<?php
$ch = curl_init(); // PHP 8: returns a CurlHandle object, not a resource
echo gettype($ch), PHP_EOL; // object
// get_resource_type($ch); // TypeError: must be of type resource, CurlHandle given
?>Résultat :
objectLes anciens tutoriels qui montrent get_resource_type($curlHandle) retournant "curl" sont donc obsolètes. Pour ces descripteurs basés sur des objets, utilisez plutôt get_class() / instanceof. Les flux de fichiers issus de fopen() sont toujours de véritables ressources, ce qui en fait l'exemple fiable.
Se prémunir contre les non-ressources
Comme passer une non-ressource lève une TypeError dans PHP 8, vérifiez d'abord avec is_resource() lorsque la valeur peut être fermée ou valoir false :
<?php
$file = fopen("php://memory", "r");
fclose($file);
if (is_resource($file)) {
echo get_resource_type($file);
} else {
echo "Not an active resource";
}
?>Résultat :
Not an active resourceAprès fclose(), la variable devient une ressource fermée : is_resource() retourne false, et gettype() signale "resource (closed)". Une telle vérification permet d'éviter une TypeError fatale.
Quand utiliser cette fonction ?
- Validation des entrées d'une fonction qui ne devrait accepter qu'un type de ressource spécifique (par exemple, rejeter tout ce qui n'est pas un
"stream"). - Débogage / journalisation — enregistrer ce qu'est réellement une ressource lors de la recherche d'un bogue.
- Logique de branchement dans des bibliothèques qui traitent différemment plusieurs types de ressources.
Pour un simple contrôle « est-ce une ressource ? », préférez is_resource() ; utilisez get_resource_type() uniquement lorsque vous avez besoin de distinguer quel type de ressource il s'agit.
Conclusion
get_resource_type() retourne une string décrivant le type de ressource que contient une variable, ce qui est utile pour la validation, le débogage et le branchement selon le type. N'oubliez pas le changement PHP 8 : de nombreux descripteurs qui étaient auparavant des ressources (cURL, MySQLi, GD) sont désormais des objets et déclencheront une TypeError — pour ceux-ci, utilisez get_class() à la place. Associez get_resource_type() à is_resource() afin de ne jamais l'appeler sur une valeur fermée ou invalide.