Introducción

Es muy común en PHP trabajar con archivos o ficheros. Hay ocasiones en las que vamos a necesitar mover, copiar, renombrar, crear o eliminar un archivo o directorio.

Hoy veremos cómo realizar todas estas operaciones desde PHP.

Crear archivo vacío

Si sólo queremos crear un archivo, sin escribirle contenido, usamos touch:

Esta función regresa true o false dependiendo del éxito de la operación. Notar por favor que concatenamos con __DIR__ para darle a touch la ruta absoluta del fichero.

Por cierto, en este caso fue un archivo .txt pero podríamos hacerlo con cualquier tipo de archivo. También podríamos modificar el momento de acceso y última modificación del archivo, pero eso es tema para otro post. Aquí la documentación oficial.

Crear archivo de texto y escribirle contenido

Anteriormente sólo “tocamos” un archivo. Ahora veamos cómo escribirle texto a un archivo txt.

Así es como escribimos contenido en un archivo de texto. Si el archivo no existe, será creado.

La función file_put_contents devuelve un entero, o false. False en caso de que la operación no haya sido completada correctamente, o un entero representando los bytes escritos en caso contrario.

Por cierto, esta función va a sobrescribir el contenido del archivo, no lo adjuntará. Sigamos leyendo para ver cómo hacer que adjunte y no remplace el contenido.

Crear archivo de texto y adjuntar contenido

Utilizamos de nuevo a file_put_contents pero ahora le pasamos una bandera para que adjunte el contenido. Así:

Veamos que como tercer argumento pasamos la bandera FILE_APPEND que indica a file_put_contents que adjunte el contenido.

También cambiamos el contenido, agregándole un salto de línea. Así, si ejecutamos el script muchas veces y abrimos el archivo de texto, se verán líneas separadas.

Crear directorio o carpeta

Veamos cómo crear una carpeta o directorio en PHP. Ahora utilizamos la función mkdir que recibe como primer argumento la ruta de la carpeta que se va a crear, así como el modo y un booleano indicando si será recursiva o no.

Aquí sólo veremos cómo crear un directorio, pero podemos profundizar en la documentación oficial.

Mkdir regresa un booleano indicando el éxito o fracaso.

Copiar archivo

Si queremos crear una copia de un archivo en otro directorio, usamos copy y le pasamos el origen y el destino. Así:

 

Igualmente podríamos crear una copia (para respaldar, por ejemplo) en el mismo directorio, de esta manera:

Como vemos, copy devuelve un booleano indicando el éxito de la operación.

Mover archivo

Si queremos cortar o mover un archivo a otra ubicación utilizamos rename. Básicamente lo que hacemos cuando movemos un archivo es renombrarlo; de ahí que la función se llame de esa manera.

Este ejemplo mueve el archivo 2.txt a fotos/2.txt

Con esto cambiamos de lugar a 2.txt

Renombrar

Utilizamos la misma función para cambiar el nombre de un archivo. En este caso renombramos 1.txt a 1.log:

 

Eliminar archivo

Si queremos eliminar un archivo (no un directorio) utilizamos unlink, así:

Notar por favor que esto elimina un archivo, pero no un directorio.

Eliminar directorio

Ahora veamos cómo eliminar un directorio, folder o carpeta. Para ello ahora usamos rmdir. El directorio en cuestión debe estar vacío, si no, no podremos eliminarlo.

Si el directorio no está vacío, se generará un error que dice Directory not empty.

Esto es porque el directorio tiene contenido; si queremos eliminarlo completamente primero debemos vaciarlo; es decir, eliminar archivos y ficheros dentro de ese folder.

Eliminar directorio y contenidos recursivamente

En caso de que deseemos eliminar un directorio recursivamente (o sea, borrarlo junto con su contenido) podemos usar el siguiente código:

Como se puede observar, en ese caso se elimina al directorio fotos con todo su contenido. Hay que ser cuidadosos con esta función.

Por cierto, el código sólo fue traducido y explicado por mí, aunque yo no soy el autor. El original está aquí.

Comprobar si directorio o archivo existe

En los ejemplos de arriba copiamos, movimos e hicimos todas las operaciones sin comprobar primero si el archivo, fichero o directorio en cuestión existían.

Cuando desarrollemos apps de la vida real, debemos manejar todos esos errores. En este caso, si queremos comprobar si el directorio o fichero existe usamos file_exists.

Otras funciones que vienen de gran ayuda son is_dir para comprobar si una ruta es un directorio, así como is_file que hace lo mismo pero para un archivo.

Estoy interesado en trabajar contigo de manera remota para llevar tu idea a la realidad, formar parte de tu equipo de desarrolladores, ayudarte con tu tarea, dar asesorías y todo lo relacionado con tecnología y programación. Contáctame para más información
No te vayas sin seguirme en Twitter, Facebook y GitHub
Si tienes dudas déjalas en un comentario, pero asegúrate de seguirme antes como agradecimiento (no te cuesta nada y me ayudas mucho)


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

5 Comments

Jose Paz · noviembre 27, 2018 a las 5:00 pm

SALUDOS!
Espero me puedas orientar o sacar de una duda, primeramente estoy apenas empezando en esto del PHP, y empece por algo sencillo creando un formulario con 3 campos input de type=text y otro mas de type=file,,, en mi form, tengo todo esto junto y lo que deseo es que esta información ingresada por el usuario se carga en una base de datos y que el archivo se suba al servidor una carpeta especifica de cual el nombre de esta sea uno de los 3 campos que el usuario ingreso en los input type=text, es esto posible ??? o es su defecto si no es posible el ingreso por teclado del nombre de la carpeta que esta obtenga el nombre del consecutivo numero del ID que es autoincrementable en la base de datos!
espero explicarme que es lo que deseo que se realice al almacenar los archivos subidos al server, GRACIAS

Ejemplo y prevención de secuestro o robo de sesión en PHP - Parzibyte's blog · septiembre 7, 2018 a las 12:21 pm

[…] Será una página en donde se escriben simples mensajes y todos los usuarios los pueden ver. Por simplicidad y para no meternos con bases de datos (aunque si quieres ver bases de datos aquí hay un tutorial con MySQL) guardaremos todo en un fichero de texto (aquí el tutorial). […]

Unir o combinar archivos PDF con PHP y libmergepdf - Parzibyte's blog · febrero 4, 2019 a las 9:01 am

[…] este caso usaremos file_put_contents (pásate por este tutorial para aprender más) y queda […]

Loguear errores y mensajes en PHP en archivo de texto con un logger - Parzibyte's blog · febrero 11, 2019 a las 9:00 am

[…] Más abajo veremos un ejemplo. Te recomiendo ver cómo trabajar con archivos en PHP. […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: