get_resource_type()
A função get_resource_type() do PHP retorna o tipo do recurso de uma variável do tipo resource, útil para depuração e validação.
Introdução
get_resource_type() é uma função nativa do PHP que retorna uma string com o nome do tipo de resource que uma variável contém — por exemplo "stream" para um arquivo aberto, ou "process" para um programa externo em execução.
Um resource é uma variável especial do PHP que mantém uma referência a algo externo ao PHP: um arquivo aberto, um socket de rede, uma imagem sendo construída em memória, um processo filho, entre outros. Como o objeto subjacente é opaco, não é possível inspecioná-lo diretamente. get_resource_type() fornece um rótulo legível para qual é o resource, o que é útil para logging, depuração e para escrever funções que aceitam vários tipos de resource mas tratam apenas alguns deles.
Esta página aborda a sintaxe, as strings de tipo de resource que você encontrará na prática, um aviso importante sobre o PHP 8 (muitos "resources" antigos agora são objects), e como usar a função com segurança.
Sintaxe
get_resource_type(resource $handle): stringEla aceita um único parâmetro:
$handle— o resource cujo tipo você deseja. Deve ser um valor de resource ativo.
Ela retorna uma string em minúsculas que identifica o tipo do resource. Se você passar qualquer coisa que não seja um resource, o PHP 8 lança um TypeError (no PHP 7, emitia um aviso e retornava null).
Exemplo básico
O resource mais comum que você inspecionará é um identificador de arquivo/stream de fopen():
<?php
$file = fopen("php://memory", "w+");
echo get_resource_type($file), PHP_EOL; // stream
fclose($file);
?>Saída:
streamphp://memory é um stream real e sempre disponível, então este exemplo funciona em qualquer lugar sem precisar de um arquivo em disco.
Strings de tipo de resource mais comuns
Diferentes funções criam diferentes tipos de resource. Alguns que você provavelmente encontrará:
<?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);
?>Saída:
stream
stream-context
processAs strings exatas vêm da extensão que criou o resource, portanto são nomes estáveis com os quais você pode comparar ("stream", "curl" em versões mais antigas do PHP, "gd" para identificadores de imagem mais antigos, etc.).
Atenção: o PHP 8 converteu muitos resources em objects
Este é o ponto mais importante a ter em mente. A partir do PHP 8.0, várias extensões migraram seus tipos de resource antigos para objects reais. Identificadores cURL, conexões MySQLi, imagens GD e outros não são mais resources — portanto get_resource_type() agora lança um TypeError ao recebê-los:
<?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
?>Saída:
objectPortanto, tutoriais antigos que mostram get_resource_type($curlHandle) retornando "curl" estão desatualizados. Para esses identificadores baseados em object, use get_class() / instanceof. Streams de arquivo do fopen() ainda são resources genuínos, razão pela qual continuam sendo o exemplo mais confiável.
Protegendo-se contra não-resources
Como passar um não-resource causa um TypeError no PHP 8, verifique primeiro com is_resource() quando o valor pode estar fechado ou 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";
}
?>Saída:
Not an active resourceApós fclose(), a variável se torna um resource fechado: is_resource() retorna false, e gettype() informa "resource (closed)". Essa verificação evita um TypeError fatal.
Quando usar esta função?
- Validação de entrada em uma função que deve aceitar apenas um tipo específico de resource (por exemplo, rejeitar tudo que não seja um
"stream"). - Depuração / logging — registrar o que um resource realmente é ao rastrear um bug.
- Lógica condicional em bibliotecas que tratam diferentes tipos de resource de maneiras distintas.
Para uma verificação simples de "isto é algum tipo de resource?", prefira is_resource(); recorra a get_resource_type() apenas quando precisar distinguir qual resource é.
Conclusão
get_resource_type() retorna uma string que descreve o tipo de resource que uma variável contém, o que é útil para validação, depuração e ramificação por tipo. Lembre-se da mudança no PHP 8: muitos identificadores que antes eram resources (cURL, MySQLi, GD) agora são objects e causarão um TypeError — nesses casos, use get_class(). Combine get_resource_type() com is_resource() para nunca chamá-la em um valor fechado ou inválido.