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.

Separador

Escanear directorios recursivamente

En el artículo anterior hablé de los iteradores que aporta PHP para acceder al sistema de archivos y puse una función para eliminar directorios de manera recursiva.

Ahora pondré una función que devuelve todos los archivos y directorios de un directorio de manera recursiva. También se puede filtrar el resultado para devolver solamente los directorios o los archivos.

Separador

Borrar directorio recursivamente

PHP aporta algunos iteradores interesantes para acceder al sistema de archivos. Anteriormente era algo tedioso tener que buscar archivos, eliminar directorios, etc., pero con estos iteradores se ha vuelto un poco más fácil la manipulación.

Aprovechando estos iteradores, a continuación pongo una función que permite eliminar de manera recursiva un directorio y que uso normalmente en mis clases por medio de un trait.

Separador

Leer el contenido recibido por POST

Si alguien nos pide que recuperemos el contenido que se ha enviado usando el método POST lo primero que se nos viene a la mente es usar $_POST y acceder al contenido usando el nombre del parámetro.

El problema se presenta cuando los datos no se pasan como parámetro, como ocurre con muchas interfaces REST, sino que los recibimos en el cuerpo de la petición.

Separador

Concatenar array asociativo

A veces hecho de menos en PHP una función para concatenar arrays asociativos, algo parecido a la función http_build_query pero que permita especificar el texto a usar para concatenar cada par clave-valor en vez del = y también poder especificar el texto para concatenar el resultado en lugar de &.

Normalmente las soluciones que he visto para afrontar esta necesidad son iterativas así que tratando de hacer algo parecido con funciones nativas encontré una solución con las funciones vprintf, vsprintf y vfprintf.