|
(PHP 5)
stream_filter_register -- Registrar un filtro de secuencia implementado como una clase PHP derivada de php_user_filterstream_filter_register() le permite implementar su propio filtro en cualquier secuencia registrada utilizada con todas los otras funciones de sistema de archivos (tales como fopen(), fread() etc.).
Para implementar un filtro, necesita definir una clase como una extensión de php_user_filter con un número de funciones miembro, tal y como se define más adelante. Cuando realice operaciones de lectura/escritura en la secuencia a la que se ha adjuntado su filtro, PHP pasará los datos a través de su filtro (y cualquier otro filtre adjunto a esa secuencia) de modo que los datos puedan ser modificados como lo desee. Debe implementar los métodos exactamente como se describe más adelante - hacerlo de otra forma llevará a comportamientos indefenidos.
stream_filter_register() devolverá FALSE si nombre_filtro ya se encuentra definido.
int filter ( resource entrada, resource salida, int &consumido, bool cerrando )
Este método es llamado siempre que se lean o escriban
datos desde y hacia la secuencia adjunta (tal y como sucede
con fread()
o fwrite()). entrada es
un recurso que apunta a una brigada de
paquetes que contiene uno o más objetos de
tipo paquete que contienen datos a ser
filtrados. salida es un recurso que apunta
a una segunda brigada de paquetes en la que
deben ser colocados sus paquetes modificados.
consumido, que debe
declararse siempre por referencia, debe ser
incrementado de acuerdo a la longitud de los datos que su filtro
lee y altera. En la mayoría de casos esto quiere decir que
usted incrementa consumido en
$paquete->datalen para cada $paquete. Si la secuencia está
en el proceso de ser cerrada (y por lo tanto este es el
último paso por la cadena de filtros), el
parámetro cerrando será
definido como TRUE. El
método filter
debe devolver uno
de tres valores cuando complete su ejecución.
Valor de Retorno | Significado |
---|---|
PSFS_PASS_ON | El filtro fue procesado satisfactoriamente con los datos disponibles en la brigada de paquetes salida. |
PSFS_FEED_ME | El filtro fue procesado satisfactoriamente, sin embargo, no habían datos disponibles para devolver. Se requieren más datos desde la secuencia o desde el filtro anterior. |
PSFS_ERR_FATAL (predeterminado) | El filtro experimentó un error irrecuperable y no puede continuar. |
Este método es llamado durante la instanciación del objeto clase del filtro. Si su filtro ubica o inicializa cualquier otro tipo de recursos (como un búfer), éste es el lugar para hacerlo. Su implementación de este método debería devolver FALSE en caso de fallo, o TRUE si tiene éxito.
Cuando su filtro es instanciado por primera vez, y su_filtro->onCreate() es llamado, se colocarán a su disposición un número de propiedades, como lo muestra la siguiente tabla.
Propiedad | Contenidos |
---|---|
ClaseFiltro->filtername | Una cadena que contiene el nombre con el que fue instanciado el filtro. Los filtros pueden ser registrados bajo múltiples nombres o bajo comodines. Use ésta propiedad para determinar el nombre que fue usado. |
ClaseFiltro->params | Los contenidos del parámetro parametros pasado a stream_filter_append() o stream_filter_prepend(). |
Este método es llamado cuando se realiza la destrucción del filtro (por lo general, esto ocurre también durante la destrucción de la secuencia), y es ejecutado después de que el método flush es llamado. Si se ubicaron o inicializaron recursos durante onCreate, éste sería el momento para destruirlos o desecharlos.
El siguiente ejemplo implementa un filtro llamado strtoupper en la secuencia foo-bar.txt, el cual convierte a mayúsculas todos los caracteres alfabéticos escritos hacia/leidos desde esa secuencia.
Ejemplo 2. Registro de una clase genérica de filtro para que coincida con múltiples nombres de filtro.
El resultado del ejemplo seria:
|
Vea también stream_wrapper_register(), stream_filter_prepend(), y stream_filter_append().
Hosting by: hurra.com
Generated: 2007-01-26 18:00:50