Manipulación Avanzada de Streams con Filtros Personalizados en PHP
PHP ofrece un poderoso sistema de streams que permite la manipulación de datos de diversas fuentes, como archivos, redes y memoria. Una característica menos conocida, pero extremadamente útil, es la capacidad de crear filtros de stream personalizados. Estos filtros permiten interceptar y modificar los datos a medida que fluyen a través del stream, proporcionando un control granular sobre la entrada y salida.
Los filtros de stream se implementan como clases que extienden la clase abstracta `php_user_filter`. Cada filtro debe implementar tres métodos principales: `filter()`, `onCreate()` y `onClose()`. El método `filter()` es el corazón del filtro, donde la lógica de transformación se aplica a los datos. `onCreate()` se llama cuando el filtro se crea, y `onClose()` cuando se destruye, permitiendo la inicialización y liberación de recursos.
A continuación, se muestra un ejemplo de un filtro personalizado que convierte texto a mayúsculas:
<?php
class UpperCaseFilter extends php_user_filter
{
public function filter($in, $out, &$consumed, $closing)
{
$data = '';
while ($bucket = stream_bucket_make_writeable($in)) {
$data .= strtoupper($bucket->data);
$consumed += $bucket->datalen;
}
$bucketout = stream_bucket_new($this->stream, $data);
stream_bucket_append($out, $bucketout);
return PSFS_PASS_ON; // Indica que el filtro ha procesado los datos.
}
public function onCreate()
{
return true; // Indica éxito en la creación.
}
public function onClose()
{
return true; // Indica éxito en el cierre.
}
}
stream_filter_register("uppercase", "UpperCaseFilter");
$file = fopen("test.txt", "r+");
stream_filter_append($file, "uppercase");
while (!feof($file)) {
echo fgets($file);
}
fclose($file);
?>
En este ejemplo, primero se define la clase `UpperCaseFilter`, que hereda de `php_user_filter`. El método `filter()` toma un bucket de datos de entrada, lo convierte a mayúsculas y lo añade a un nuevo bucket de salida. Luego, se registra el filtro con `stream_filter_register()`, asignándole el nombre "uppercase". Finalmente, se abre un archivo, se aplica el filtro al stream del archivo con `stream_filter_append()`, y se lee el contenido del archivo, que ahora estará en mayúsculas.
La manipulación de streams con filtros personalizados ofrece flexibilidad y control sobre el flujo de datos en PHP. Se pueden crear filtros para compresión, cifrado, validación o cualquier otra transformación necesaria. Esta técnica es especialmente útil cuando se trabaja con grandes volúmenes de datos o cuando se necesita modificar datos sobre la marcha sin cargarlos completamente en memoria.
No hay comentarios:
Publicar un comentario