Curso POO PHP Fluxos
Fluxos
Os fluxos son un xeito de xeralizar certas operacións comúns aos ficheiros e aos recursos de rede, entre outros. En PHP, os fluxos identifícanse por variables de tipo resource. Por exemplo, as funcións file e file_get_contents empregan fluxos para traballar co sistema de ficheiros. E a función fopen abre un fluxo e devolve o recurso asociado ao mesmo, que podemos empregar máis adiante no resto de operacións sobre o fluxo.
As funcións que traballan con fluxos operan de xeito distinto según sexa o tipo de recurso ao que se accede (por exemplo, un ficheiro local ou un ficheiro remoto mediante HTTP). Aos distintos tipos de recursos soportados por PHP chámaselles envolturas. PHP soporta unha serie de envolturas base como http://, file:// ou ogg://.
PHP inclúe un amplo conxunto de funcións para traballar con fluxos.
Contexto
PHP tamén permite especificar un contexto para os fluxos. No contexto figuran o conxunto de opcións específicas para unha envoltura determinada. Por exemplo, ao abrir un fluxo a un recurso web empregando o protocolo HTTP, podemos especificar como contexto o método a empregar (GET) ou algún encabezado específico como "Cookie". Isto faise creando o contexto coa función stream_context_create a partir dun array.
$opcions = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: es\r\n"."Cookie: usuario=Victor\r\n"
)
);
$contexto = stream_context_create($opcions);
// Envía unha petición HTTP a www.iessanclemente.net coas cabeceiras adicionais
$fich = fopen('www.iessanclemente.net', 'r', false, $contexto);
Do mesmo xeito, unha vez que temos un fluxo aberto podemos empregar a función stream_get_contents para obter o seu contido en forma de cadea, e a función stream_get_meta_data para recuperar información adicional acerca do fluxo, como as cabeceiras HTTP se é o caso.
$fich = fopen("http://www.iessanclemente.net/", "rb");
echo var_dump(stream_get_meta_data($fich));
Características avanzadas dos fluxos
É posible definir filtros sobre os fluxos. Os filtros son operacións que se levan a cabo sobre a información que se le ou escribe nun fluxo. Para rexistrar un filtro emprégase a función stream_filter_register.
Pódese incluso crear un envoltorio personalizado para empregar fluxos como método de acceso a calquera información que precisemos. PHP define a clase ficticia streamWrapper que contén a lista dos métodos que deberían figurar nunha clase para que poida traballar como xestor dun envoltorio a medida. Unha vez creada a clase, deberase rexistrar o envoltorio empregando a función stream_wrapper_register.
--Víctor Lourido 17:24 15 jul 2013 (CEST)