W3docs

set_file_buffer()

Aprende cómo stream_set_write_buffer() controla el búfer de escritura en PHP, por qué set_file_buffer() está obsoleto y cómo deshabilitar el búfer.

Introducción

En PHP, la función stream_set_write_buffer() se utiliza para establecer el tamaño del búfer de escritura de un flujo de archivo. Es una función útil para optimizar el rendimiento de los scripts PHP al controlar cómo se vacían los datos al disco. Tenga en cuenta que la función más antigua set_file_buffer() quedó obsoleta en PHP 4.3.0 y fue eliminada en PHP 5.0.0, por lo que stream_set_write_buffer() es el enfoque moderno correcto. En este artículo, cubriremos todo lo que necesita saber sobre la función stream_set_write_buffer(), incluyendo su sintaxis, parámetros y ejemplos de cómo puede utilizarse.

Comprender la función stream_set_write_buffer()

La función stream_set_write_buffer() en PHP se utiliza para establecer el tamaño del búfer de escritura de un flujo. Acepta dos parámetros: el recurso de flujo y el tamaño del búfer en bytes.

Cuando se utiliza stream_set_write_buffer(), PHP configura el flujo para almacenar en búfer hasta el número de bytes especificado antes de vaciar los datos al disco. Establecer el tamaño del búfer en 0 deshabilita completamente el búfer, lo cual es una configuración habitual para la salida en tiempo real. El búfer se vacía automáticamente cuando alcanza el tamaño especificado, cuando el script termina o cuando se llama explícitamente a fflush() en el flujo. Configurarlo adecuadamente puede ser útil para optimizar el rendimiento de los scripts PHP, especialmente al escribir grandes cantidades de datos.

Sintaxis de la función stream_set_write_buffer()

La sintaxis de la función stream_set_write_buffer() es la siguiente:

stream_set_write_buffer($stream, $buffer);

Los parámetros son:

  • $stream — un recurso de flujo grabable, normalmente devuelto por fopen().
  • $buffer — el tamaño del búfer en bytes. Use 0 para deshabilitar el búfer de modo que cada escritura se vacíe inmediatamente.

Según el manual de PHP, la función devuelve 0 en caso de éxito. En la práctica, el valor de retorno depende de la plataforma (algunos sistemas devuelven un valor distinto de cero incluso cuando el búfer está configurado), por lo que no se debe ramificar en él. Si necesita un vaciado garantizado, llame a fflush() en lugar de confiar en el código de retorno.

Ejemplos de uso de stream_set_write_buffer()

Veamos un ejemplo de cómo se puede utilizar la función stream_set_write_buffer() en PHP.

Ejemplo 1: Configurar el búfer de archivo

<?php

$file_handle = fopen('example.txt', 'w');
stream_set_write_buffer($file_handle, 1024);
fwrite($file_handle, 'Hello, world!');
fclose($file_handle);

Este ejemplo abre el archivo example.txt para escritura y establece el búfer de escritura en 1024 bytes. PHP ahora retiene los datos escritos en memoria hasta que se acumulen 1024 bytes, hasta que se llame a fflush() o hasta que el flujo se cierre con fclose(), lo cual vacía cualquier dato almacenado en búfer y libera los recursos del sistema. Siempre cierre el identificador cuando haya terminado.

Ejemplo 2: Deshabilitar el búfer para escrituras inmediatas

Cuando desea que cada escritura llegue al disco de inmediato — por ejemplo, al escribir un archivo de registro que otro proceso sigue en tiempo real — establezca el tamaño del búfer en 0:

<?php

$log = fopen('app.log', 'a');
stream_set_write_buffer($log, 0); // unbuffered: every fwrite() flushes immediately

fwrite($log, "Request received\n");
fwrite($log, "Response sent\n");

fclose($log);

Con el búfer deshabilitado, cada llamada a fwrite() se escribe de forma inmediata en lugar de esperar a que el búfer se llene, a costa de operaciones de E/S de disco más frecuentes.

Conclusión

La función stream_set_write_buffer() en PHP permite optimizar el rendimiento del script controlando cuántos datos almacena en búfer un flujo antes de vaciarlo al disco — y deshabilitar el búfer por completo con un tamaño de 0 cuando se necesitan escrituras inmediatas. Dado que su valor de retorno no es fiable entre plataformas, combínela con fflush() cuando deba forzar un vaciado. Para profundizar más, explore fopen() para abrir flujos, fwrite() para escribir en ellos y fclose() para cerrarlos correctamente.

Práctica

Práctica
¿Cuál es la forma moderna y correcta de establecer el búfer de escritura de un flujo de archivo en PHP?
¿Cuál es la forma moderna y correcta de establecer el búfer de escritura de un flujo de archivo en PHP?
Was this page helpful?