W3docs

get_resource_type()

La función get_resource_type() es una función integrada de PHP que devuelve el tipo de recurso de un recurso dado. Un recurso es un tipo especial de variable que

Introducción

get_resource_type() es una función integrada de PHP que devuelve un string con el nombre del tipo de recurso que contiene una variable — por ejemplo "stream" para un archivo abierto, o "process" para un programa externo en ejecución.

Un recurso es una variable especial de PHP que contiene una referencia a algo que existe fuera de PHP: un archivo abierto, un socket de red, una imagen que se está construyendo en memoria, un proceso hijo, etc. Como el objeto subyacente es opaco, no puedes inspeccionarlo directamente. get_resource_type() te proporciona una etiqueta legible para qué es el recurso, lo que resulta útil para registro, depuración y escritura de funciones que aceptan varios tipos de recursos pero solo manejan algunos de ellos.

Esta página cubre la sintaxis, los strings de tipo de recurso que encontrarás en la práctica, una advertencia importante de PHP 8 (muchos "recursos" anteriores ahora son objetos) y cómo usar la función de forma segura.

Sintaxis

get_resource_type(resource $handle): string

Acepta un único parámetro:

  • $handle — el recurso cuyo tipo deseas obtener. Debe ser un valor de recurso activo.

Devuelve un string en minúsculas que identifica el tipo de recurso. Si pasas algo que no es un recurso, PHP 8 lanza un TypeError (en PHP 7 emitía una advertencia y devolvía null).

Ejemplo básico

El recurso más común que inspeccionarás es un manejador de archivo/flujo obtenido con fopen():

<?php
$file = fopen("php://memory", "w+");

echo get_resource_type($file), PHP_EOL; // stream

fclose($file);
?>

Salida:

stream

php://memory es un flujo real y siempre disponible, por lo que este ejemplo funciona en cualquier entorno sin necesidad de un archivo en disco.

Strings de tipo de recurso comunes

Distintas funciones crean diferentes tipos de recursos. Algunos que probablemente encontrarás:

<?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);
?>

Salida:

stream
stream-context
process

Los strings exactos provienen de la extensión que creó el recurso, por lo que son nombres estables con los que puedes comparar ("stream", "curl" en PHP antiguo, "gd" para manejadores de imagen antiguos, etc.).

Atención: PHP 8 convirtió muchos recursos en objetos

Esta es la advertencia más importante. A lo largo de PHP 8.0, varias extensiones migraron sus antiguos tipos de recurso a objetos reales. Los manejadores cURL, las conexiones MySQLi, las imágenes GD y otros ya no son recursos — por lo que get_resource_type() ahora lanza un TypeError con ellos:

<?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
?>

Salida:

object

Por eso, los tutoriales más antiguos que muestran get_resource_type($curlHandle) devolviendo "curl" están desactualizados. Para estos manejadores basados en objetos, usa get_class() / instanceof en su lugar. Los flujos de archivo de fopen() siguen siendo recursos genuinos, razón por la que continúan siendo el ejemplo fiable.

Protección frente a no-recursos

Dado que pasar un no-recurso provoca un TypeError en PHP 8, comprueba primero con is_resource() cuando el valor podría estar cerrado o ser false:

<?php
$file = fopen("php://memory", "r");
fclose($file);

if (is_resource($file)) {
    echo get_resource_type($file);
} else {
    echo "Not an active resource";
}
?>

Salida:

Not an active resource

Después de fclose(), la variable se convierte en un recurso cerrado: is_resource() devuelve false, y gettype() reporta "resource (closed)". Usar esta comprobación evita un TypeError fatal.

¿Cuándo usaría esto?

  • Validar entradas de una función que solo debería aceptar un tipo específico de recurso (p. ej., rechazar todo lo que no sea un "stream").
  • Depuración / registro — registrar qué es realmente un recurso cuando se rastrea un error.
  • Lógica de ramificación en bibliotecas que manejan varios tipos de recursos de forma diferente.

Para una comprobación simple de "¿es esto un recurso?", prefiere is_resource(); recurre a get_resource_type() solo cuando necesitas distinguir qué tipo de recurso es.

Conclusión

get_resource_type() devuelve un string que describe qué tipo de recurso contiene una variable, lo cual es útil para validación, depuración y ramificación específica por tipo. Recuerda el cambio de PHP 8: muchos manejadores que antes eran recursos (cURL, MySQLi, GD) ahora son objetos y provocarán un TypeError — en esos casos, usa get_class() en su lugar. Combina get_resource_type() con is_resource() para no llamarla nunca sobre un valor cerrado o inválido.

Práctica

Práctica
¿Qué hace la función get_resource_type() en PHP?
¿Qué hace la función get_resource_type() en PHP?
Was this page helpful?