Las secuencias (streams) fueron introducidas con PHP 4.3.0 como un medio de generalizar el acceso a archivos, recursos de red, compresi贸n de datos, y otras operaciones que comparten un juego com煤n de funciones y usos. En su forma m谩s simple, una secuencia es un objeto recurso que exhibe un comportamiento secuenciable. Esto quiere decir, pueden leerse datos desde la secuencia o escribir datos hacia ella en una forma lineal, y puede que sea posible efectuar b煤squedas con fseek() de ubicaciones arbitrarias dentro de la secuencia.
Una envoltura (wrapper) es un c贸digo adicional que le dice a la secuencia c贸mo gestionar los protocolos y codificaciones espec铆ficas. Por ejemplo, la envoltura http sabe c贸mo traducir una URL a una petici贸n HTTP/1.0 por un archivo en un servidor remoto. Existen varias envolturas incluidas con PHP por defecto (Vea Ap茅ndice M), y envolturas adicionales, personalizadas, pueden agregarse ya sea dentro de un script PHP usando stream_wrapper_register(), o directamente desde una extensi贸n usando la Referencia de API en Cap铆tulo 44. Dado que cualquier tipo de envoltura puede ser agregada a PHP, no existe un l铆mite impuesto en lo que se puede hacer con ellas. Para consultar la lista de envolturas soportadas actualmente, use stream_get_wrappers().
Una secuencia es referenciada como: esquema://destino
esquema(cadena) - El nombre de la envoltura a ser usada. Algunos ejemplos: file, http, https, ftp, ftps, compress.zlib, compress.bz2, y php. Vea Ap茅ndice M para consultar una lista de envolturas integradas con PHP. Si no se especifica una envoltura, es usada la envoltura predeterminada de la funci贸n (usualmente file://).
destino - Depende en la envoltura usada. Para secuencias relacionadas con el sistema de archivos, 茅ste par谩metro es por lo general una ruta y un nombre de archivo que apunta al archivo deseado. Para secuencias de red, usualmente consiste de un nombre de host, por lo general con una ruta adicionada al final. Nuevamente, vea Ap茅ndice M para encontrar una descripci贸n de destinos para las secuencias integradas.
Un filtro es una pieza final de c贸digo que puede efectuar operaciones sobre los datos a medida que 茅stos son le铆dos desde una secuencia o escritos hacia una. Puede apilarse cualquier cantidad de filtros sobre una secuencia. Pueden definirse filtros personalizados en un script PHP usando stream_filter_register() o en una extensi贸n usando la Referencia API de Cap铆tulo 44. Para consultar la lista de filtros registrados actualmente, use stream_get_filters().
Un contexto es un conjunto de par谩metros y opciones espec铆ficas de cada envoltura que modifican o mejoran el comportamiento de una secuencia. Los contextos son creados usando stream_context_create() y pueden ser pasados a la mayor铆a de funciones de creaci贸n de secuencias relacionadas con el sistema de archivos (esto es, fopen(), file(), file_get_contents(), etc...).
Pueden especificarse opciones cuando se hacen llamados a stream_context_create(), o m谩s adelante usando stream_context_set_option(). Una lista de opciones espec铆ficas de envoltura puede encontrarse con la lista de envolturas integradas (Vea Ap茅ndice M).
Adicionalmente, pueden definirse par谩metros en un contexto usando stream_context_set_params(). Actualmente, el 煤nico par谩metro de contexto soportado por PHP es notificaci贸n. El valor de 茅ste par谩metro debe ser el nombre de una funci贸n a ser llamada cuando un evento ocurre sobre una secuencia. La funci贸n de notificaci贸n llamada durante un evento debe aceptar los siguientes seis par谩metros:
void mi_notificador ( int codigo_notificacion, int severidad, string mensaje, int codigo_mensaje, int bytes_transferidos, int bytes_max )codigo_mensaje y severidad son valores num茅ricos que corresponden a las constantes STREAM_NOTIFY_* listadas m谩s adelante. Si un mensaje descriptivo se encuentra disponible desde la secuencia, mensaje y codigo_mensaje se popular谩n con los valores apropiados. El significado de 茅stos valores depende de la envoltura espec铆fica en uso. bytes_transferidos y bytes_max se popular谩n cuando sea aplicable.
Las secuencias son parte integral de PHP a partir de la versi贸n 4.3.0. No se requiere de ning煤n paso adicional para habilitarlas.
Es posible registrar envolturas dise帽adas por el usuario mediante stream_wrapper_register(), use la definici贸n de clase expuesta en su respectiva p谩gina del manual.
La clase php_user_filter se encuentra predefinida y es una clase base abstracta para su uso con filtros definidos por el usuario. Vea la p谩gina del manual sobre stream_filter_register() para m谩s detalles sobre la implementaci贸n de filtros definidos por el usuario.
Estas constantes est谩n definidas por esta extensi贸n y estar谩n disponibles solamente cuando la extensi贸n ha sido o bien compilada dentro de PHP o grabada din谩micamente en tiempo de ejecuci贸n.
| Constante | Descripci贸n |
|---|---|
| STREAM_FILTER_READ * | Usada con stream_filter_append() y stream_filter_prepend() para indicar que el filtro especificado deber铆a ser aplicado 煤nicamente cuando se est茅 efectuando lectura. |
| STREAM_FILTER_WRITE * | Usada con stream_filter_append() y stream_filter_prepend() para indicar que el filtro especificado deber铆a ser aplicado 煤nicamente cuando se est茅 efectuando escritura. |
| STREAM_FILTER_ALL * | Esta constante es equivalente a STREAM_FILTER_READ | STREAM_FILTER_WRITE. |
| PSFS_PASS_ON * | C贸digo de Retorno que indica que el filtro de espacio de usuario devolvi贸 paquetes en $salida. |
| PSFS_FEED_ME * | C贸digo de Retorno que indica que el filtro de espacio de usuario no devolvi贸 paquetes en $salida (lo que quiere decir que no hay datos disponibles). |
| PSFS_ERR_FATAL * | C贸digo de Retorno que indica que el filtro de espacio de usuario encontr贸 un error irrecuperable (esto quiere decir, se recibieron datos inv谩lidos). |
| STREAM_USE_PATH | Bandera que indica si la secuencia us贸 la ruta de inclusi贸n. |
| STREAM_REPORT_ERRORS | Bandera que indica si la envoltura es responsable de generar errores usando trigger_error() durante la apertura de la secuencia. Si esta bandera no est谩 definida, usted no deber铆a generar errores. |
| STREAM_CLIENT_ASYNC_CONNECT * | Abrir el socket de cliente asincr贸nicamente. Esta opci贸n debe ser usada junto con la bandera STREAM_CLIENT_CONNECT. Constante usada con stream_socket_client(). |
| STREAM_CLIENT_CONNECT * | Abrir una conexi贸n de socket cliente. Los sockets cliente deber铆an incluir siempre esta bandera. Constante usada con stream_socket_client(). |
| STREAM_CLIENT_PERSISTENT * | El socket de cliente abierto con stream_socket_client() debe permanecer persistente entre cargas de la p谩gina. |
| STREAM_SERVER_BIND * | Le dice a una secuencia creada con stream_socket_server() que se enlace con el destino especificado. Los sockets de servidor siempre deber铆an incluir 茅sta bandera. |
| STREAM_SERVER_LISTEN * | Le dice a una secuencia creada con stream_socket_server() y enlazada usando la bandera STREAM_SERVER_BIND que comience a escuchar en el socket. Los transportes orientados a conexiones (como TCP) deben usar esta bandera, de lo contrario el socket de servidor no ser谩 habilitado. Usar esta bandera con transportes sin conexi贸n (como UDP) es un error. |
| STREAM_NOTIFY_RESOLVE * | Una direcci贸n remota requerida para 茅sta secuencia ha sido resuelta, o la resoluci贸n fall贸. Vea severidad para contar con una indicaci贸n de lo que ha sucedido. |
| STREAM_NOTIFY_CONNECT | Se ha establecido una conexi贸n con un recurso externo. |
| STREAM_NOTIFY_AUTH_REQUIRED | Se requiere de autorizaci贸n adicional para acceder al recurso especificado. T铆picamente se emite con un nivel de severidad de STREAM_NOTIFY_SEVERITY_ERR. |
| STREAM_NOTIFY_MIME_TYPE_IS | El tipo-mime del recurso ha sido identificado, refi茅rase a mensaje para una descripci贸n del tipo descubierto. |
| STREAM_NOTIFY_FILE_SIZE_IS | El tama帽o del recurso ha sido descubierto. |
| STREAM_NOTIFY_REDIRECTED | El recurso externo ha redireccionado la secuencia a una ubicaci贸n alternativa. Refi茅rase a mensaje. |
| STREAM_NOTIFY_PROGRESS | Indica el progreso actual de una transferencia de secuencia en bytes_transferidos, y posiblemente bytes_max tambi茅n. |
| STREAM_NOTIFY_COMPLETED * | No hay m谩s datos disponibles en la secuencia. |
| STREAM_NOTIFY_FAILURE | Un error gen茅rico ocurri贸 en la secuencia, consulte mensaje y codigo_mensaje para m谩s detalles. |
| STREAM_NOTIFY_AUTH_RESULT | La autorizaci贸n se ha completado (con o sin 茅xito). |
| STREAM_NOTIFY_SEVERITY_INFO | Notificaci贸n normal, no relacionada con errores. |
| STREAM_NOTIFY_SEVERITY_WARN | Condici贸n de error no-cr铆tico. El procesamiento puede continuar. |
| STREAM_NOTIFY_SEVERITY_ERR | Un error cr铆tico ha ocurrido. El procesamiento no puede continuar. |
| STREAM_IPPROTO_ICMP + | Ofrece un socket ICMP. |
| STREAM_IPPROTO_IP + | Ofrece un socket IP. |
| STREAM_IPPROTO_RAW + | Ofrece un socket RAW. |
| STREAM_IPPROTO_TCP + | Ofrece un socket TCP. |
| STREAM_IPPROTO_UDP + | Ofrece un socket UDP. |
| STREAM_PF_INET + | Protocolo de Internet Versi贸n 4 (IPv4). |
| STREAM_PF_INET6 + | Protocolo de Internet Versi贸n 6 (IPv6). |
| STREAM_PF_UNIX + | Protocolos internos de sistema Unix. |
| STREAM_SOCK_DGRAM + | Ofrece datagramas, que son mensajes sin conexi贸n (UDP, por ejemplo). |
| STREAM_SOCK_RAW + | Ofrece un socket puro, lo cual provee accesso a protocolos de red e interfaces internas. Por lo general, este tipo de sockets s贸lo est谩n disponibles para el usuario administrador (root). |
| STREAM_SOCK_RDM + | Ofrece un socket RDM (mensajes entregados confiablemente). |
| STREAM_SOCK_SEQPACKET + | Ofrece un socket de secuencia de paquetes secuenciados. |
| STREAM_SOCK_STREAM + | Ofrece secuencias de bytes en doble-v铆a con un mecanismo de transmisi贸n para datos fuera-de-banda (TCP, por ejemplo). |
Nota: Las constantes marcadas con * se encuentran disponibles 煤nicamente a partir de PHP 5.0.0.
Nota: Las constantes marcadas con + est谩n disponibles desde PHP 5.1.0 y est谩n dise帽adas para ser usadas con stream_socket_pair(). Por favor note que algunas de estas constantes pueden no estar disponibles en su sistema.
Al igual que con cualquier otra funci贸n relacionada con archivos o sockets, una operaci贸n sobre una secuencia puede fallar por una variedad de razones normales (esto es: Incapaz de conectarse con el servidor remoto, archivo no encontrado, etc...). Una llamada relacionada con una secuencia puede fallar tambi茅n debido a que la secuencia deseada no est谩 registrada en el sistema actual. Consulte la matriz devuelta por stream_get_wrappers() para ver una lista de secuencias soportadas en su instalaci贸n de PHP. Al igual que con la mayor铆a de funciones internas de PHP, si ocurre un fallo, se generar谩 un mensaje E_WARNING que describe la naturaleza del error.
Ejemplo 1. Uso de file_get_contents() para recuperar datos de m煤ltiples fuentes
|
Ejemplo 3. Escritura de datos a un archivo comprimido
|