Eliminar-Borrar archivos con PHP utilizando unlink(ruta-fichero)

Bienvenidos a Ver Tutoriales.com, en esta ocasión os traigo un código para eliminar un archivo con PHP.

Nota: En el vídeo explico con un ejemplo el código PHP para eliminar ficheros con Unlink

Para borrar un fichero solo debemos utilizar la función unlink, veamos un ejemplo.

<?
unlink(‘tutorial.txt’);
?>

En el anterior ejemplo, estamos eliminando el archivo tutorial.txt, que ha de estar en la misma ruta que el archivo que llama la función, tambien se le podría pasar la ruta de la siguiente manera:

<?
unlink(“./../videotutoriales.fla”);
unlink(“./tutoriales/videotutoriales.fla”);
?>

En la primera llamada estamos accediendo a la carpeta contenedora del archivo y eliminando videotutoriales.fla, en la segunda llamada a la función unlink, estamos accediendo a la carpeta tutoriales y eliminando videotutoriales.fla.
Pero vamos a completar un poco este script y vamos a controlar los errores, como puede ser que el archivo esté protegido contra escritura, de manera que al tener propiedades de solo lectura no pueda borrarse o que no exista el archivo… etc.  Además le vamos a pasar el archivo por url de manera que haciendo un link a nuestro script, recojamos el nombre del archivo y lo eliminemos.
Os pongo el ejemplo:

Primero linkamos con la variable asignada por la url de la siguiente manera:

<a href=”./borrar.php?fichero=tutorial.txt”> Borrar <a>

//Y ahora controlamos que el archivo que recojemos con el método $_GET sea borrado

if (!unlink($_GET[‘fichero’])){
//si no puede ser muestro un mensaje :)
echo ‘no se pudo borrar el archivo :’.$_GET[‘archivo’];
}

Este código tiene poco que comentar, pero vamos allá, la primera linea sería un enlace a esa página, se le pasaría por url el nombre del archivo a eliminar conteniendola en la variable fichero.

Una vez cargada la página “borrar.php” recojemos el valor de fichero con el método $_GET y comprobamos que se ha podido eliminar con unlink.

La función unlink, nos devolverá 0 si no ha realizado la eliminación del fichero y un 1 si lo ha borrado, al preguntar con la ! conseguimos matar dos pajaros de un tiro, ejecutar unlink y comprobar que NO se haya llevado a cabo. Si fuera este el caso, mostramos por pantalla que hubo problemas, sino, pues seguiría el flujo de la aplicación.
Pues nada más, espero que os haya servido de ayuda.
Un saludo!

 

Este código ha de ser controlado para no sufrir algún ataque desde el envío de la url ya que no se controla la eliminación y podrían eliminar archivos necesarios. Para ello se aconseja tener los permisos necesarios de escritura y lectura según correspondan.

Te puede interesar:

23 comentarios

  • Agapito commented on 16 abril, 2010 Reply

    El código

    Tiene un error léxico, le sobra un corchete al final.

    Quedaría así:

    Salu2

    • VideoTutoriales commented on 16 abril, 2010 Reply

      Llevas razón, se me colaría al transcribirlo. Muchas gracias ya está editado.

      Un saludo!

  • HAX commented on 27 mayo, 2011 Reply

    Gracias por el tuto y los ejeplos, ahora me pongo a tratar con ellos, seguro puedo hacer algo muy bueno con ello !!. aunque tengo mucho que provar, pues mi interaccion seria borrar archivos desde flash con php.

    intentando seleccionar en flash el archivo (nombre del archivo y pasar la variable a php y borrar !!)

  • HAX commented on 27 mayo, 2011 Reply

    ok, lo he logrado !!, ahora en flash, pongo el nombre del archivo que quiero borrar, preciono el boton y me lo borra !, me avisa si el archivo con tal nombre se borro !. o si el archivo con tal nombre no se borro, ! y le agregue una comprovacion antes, para verificar si el archivo existe o no !. de esa manera si intento eliminar el archivo 2 veces, me detecta que este ya no existe !! y me manda un mensaje, este archivo tal no existe !!..

    <?

    $rm_file = $_POST['rmfile'];

    if( file_exists( $rm_file ) )
    {
    if (!unlink( $rm_file ))
    {
    echo "estado=El archivo " .$rm_file . " no se pudo borrar.";
    }
    else
    {
    echo "estado=El archivo ” .$rm_file . ” fue borrado.”;
    }
    }
    else
    {
    echo “estado=El archivo ” .$rm_file . ” NO EXISTE”;
    }

    ?>

    mando las variables del flash con loadvars via POST! y las recibo de igual forma..

  • aerview commented on 26 noviembre, 2011 Reply

    No me ha funcionado bien..quisiera saber como eliminar el archivo me urge!

    • VideoTutoriales commented on 26 noviembre, 2011 Reply

      ¿Qué te ha fallado?

      ¿Revisaste las comillas dobles? Es posible que al transcribir no ponga las comillas correctamente.

      Un saludo!

  • nico commented on 28 diciembre, 2011 Reply

    este codigo tiene un agujero de seguridad importante per esta bueno para entenderlo

  • VideoTutoriales commented on 28 diciembre, 2011 Reply

    Supongo que el agujero que ves, será por el envio del nombre de archivo por url y la toma del archivo que no está controlada.

    Eso se puede manejar, partiendo de encriptar el envío, o también controlando que no metan otras direcciones con ./../ etc.

    Vamos que todo aquel que haya llegado leyendo aquí ha de saber que se tiene que controlar :D

    Lo pondré como una nota en el artículo gracias jeje :D

  • Juan Rivera commented on 16 agosto, 2012 Reply
    • VideoTutoriales commented on 16 agosto, 2012 Reply

      Dependerá de los permisos de seguridad que tengas claro :)

      Pero es un buen apunte de seguridad, si tu usuario tiene permisos de lectura/escritura puede ser un muy mal agujero de seguridad en tu programación :)

  • frankkoq commented on 30 noviembre, 2012 Reply

    Como hago para caducar un archivo con esa funcion?

    • VideoTutoriales commented on 30 noviembre, 2012 Reply

      Esta función es solo para eliminar un fichero, necesitarás saber primero cuando se creó el fichero, para ello utiliza la función filectime, te dejo un ejemplo:

      $nombre_archivo = ‘archivo.txt';
      if (file_exists($nombre_archivo)) {
      echo “La última modificación de $nombre_archivo fue: ” . date(“F d Y H:i:s.”, filectime($nombre_archivo));
      }

      Luego solo tienes que poner una condicional de if (ha superado el tiempo) unlink(fichero)

  • oliver commented on 12 diciembre, 2012 Reply

    excelente este codigo…

    • VideoTutoriales commented on 13 diciembre, 2012 Reply

      Gracias! esta función para eliminar ficheros con PHP es muy versatil! :)

  • Fabian commented on 6 abril, 2013 Reply

    Hola

    una pregunta..
    todo me anda bien.. pero cuando tengo que borrar.. necesito borrar un archivo en el directorio que me lista el php mas el mismo archivo dentro de una subcarpeta /thumbs con el mismo nombre.

    ejemplo :
    imagenes/archivo1.jpg
    imagenes/thumbs/archivo1.jpg

    Yo arme el listado con php de todas las imagenes del directorio /imagenes (evitando que liste las del subdirectorio /thumbs)

    a la hora de eliminar…

    Borrar

    HASTA ACA ANDA PERFECTO. Pero obviamente no me borra /imagenes/thumbs/archivo1.jpg

    Tengo alguna manera de que la misma accion borre el archivo con el mismo nombre pero dentro de /imagenes/thumbs ?

    O sea seria algo asi lo que quisiera hacer :

    Borrar

    Ya lleve las variables al link pero me borra unicamente el archivo de /imagenes/ y NO el de /thumbs

    Me pude explicar bien ? ;)

    Saludos y gracias
    Fabian

    • VideoTutoriales commented on 7 abril, 2013 Reply

      Bueno es más sencillo en verdad, si lo que haces es llamar al fichero borrar.php y le pasas el nombre del archivo a eliminar, si sabes que las previas las tienes en thumbs con el mismo nombre, solo tendrás que lanzar dos veces el unlink con las dos rutas diferentes.

      Es decir, a borrar.php le pasas solamente “archivo1.jpg” y luego haces dos llamadas al unlink
      unlink(“./carpeta1″.$file);
      unlink(“./thumbs”.$file);

      Sin más complicación :)

  • cesar commented on 11 octubre, 2013 Reply

    hola!! espero me puedan ayudar, tengo muy poco tiempo utilizando php y el problema es el siguiente. tengo una pagina donde hago consultas, dentro de esta misma pagina, puedo insertar usuarios y cada usuario tiene imagenes pero son muchas imagenes por usuario estas imagenes las pongo en una carpeta con el rfc del usuario asi que son personalizadas si me equivoco al subir imagenes como las puedo eliminar espero puedan ayudarme

    • VideoTutoriales commented on 13 octubre, 2013 Reply

      Si creas una carpeta para cada usuario, lo único que tienes que tener en cuenta a la hora de eliminar la imagen con unlink es pasarle también la ruta con el directorio al que pertenece, tal y como se muestra en el ejemplo:

      unlink(“./tutoriales/videotutoriales.fla”);

      Pero en tu caso, en vez de utilizar el directorio “./tutoriales/” sería poner el rfc del usuario.

      Un saludo!

  • Muchísimas Gracias!! Funciona perfecto!! commented on 29 octubre, 2013 Reply

    Muchísimas gracias men!!
    Funciona Perfecto!!

    • VideoTutoriales commented on 29 octubre, 2013 Reply

      De nada, ten en cuenta lo que comentaban más arriba de la seguridad, al pasar valores por url hay que tener cuidado de que no eliminen algo que no deban ;)

  • BorraFichero commented on 11 abril, 2014 Reply

    Esta función para borrar un archivo en php me ha venido genial! no conocía la función unlink, muchas gracias, claro y sencillo :)

    • videotutoriales commented on 12 abril, 2014 Reply

      De nada, PHP facilita con la función unlink el borrado de archivos o ficheros y así mismo lo comparto con los demás.

      Gracias por comentar!

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>