Uso de wrappers de escritura

PHP hace uso de wrappers para leer o escribir datos en los flujos de entrada o salida. Esto nos permite seleccionar un wrapper basado en algunas condiciones y dejar el resto del código sin modificar.

Sin embargo, escribir en el flujo de salida cuando queremos enviar información al navegador puede no tener el resultado esperado.

Esto se debe a que para la salida tenemos dos flujos principales: php://stdout y php://output. El primero escribe directamente en el flujo de salida y el segundo escribe en el búffer de salida de PHP.

En el caso del navegador, si usamos el primer flujo lo que escribamos en él no se enviará al navegador ya que PHP envía al navegador el contenido del búffer. En este caso debemos usar el segundo flujo el cual escribirá en el búffer y PHP lo enviará al terminar de procesar el script y vaciar el flujo.

  1.  
  2. // Asignar a $writeTo el valor apropiado.
  3. switch ($writeTo)
  4. {
  5.      case 'browser':
  6.          $file = 'php://output';
  7.          break;
  8.      case 'console':
  9.          $file = 'php://stdout';
  10.          break;
  11.      case 'error':
  12.          $file = 'php://stderr';
  13.          break;
  14.      case 'log':
  15.          $file = substr_replace(__FILE__, '.log', -4, 4);
  16.          break;
  17.      // Agregar otros casos de uso
  18.      // @see http://php.joaquinfernandez.net/es/language/wrappers.html
  19.      // ...
  20.      default:
  21.          $file = 'php://stdout';
  22.          break;
  23. }
  24. $fp = fopen($file, 'a+');
  25. fwrite($fp, 'Escribiendo en flujo de datos apropiado');
  26. fclose($fp);

El switch anterior puede ser usado en un manejador de errores para escribir la información en el flujo apropiado y tener un registro de los errores encontrados.