Comprobar la existencia de un fichero en el servidor con PHP

  • Por
Script PHP para comprobar si existe un archivo determinado en el servidor e informar sobre su existencia o no.
Vamos a ver cómo se puede comprobar mediante PHP si un fichero existe o no en el sistema de archivos del servidor, es decir, dentro del disco duro del servidor. Esta es una tarea que se debería comprobar antes de realizar acciones con cualquier fichero del servidor, porque, si no existe el fichero, las acciones a realizar sobre él no tendrían sentido.

En PHP existe una función que nos ayudará con la tarea de comprobar si existe o no un fichero en el servidor. Nosotros solamente tenemos que hacer uso de ella para saber si existe ese archivo y por tanto, podemos operar con él.

file_exists(nombre_del_fichero)

La función devuelve un boleano, indicando con true que existe el fichero y con false que no existe. Recibe una cadena de caracteres que es el nombre del fichero que se desea comprobar.

En principio, si sólo se indica un nombre de un fichero, se supone que se debe buscar su existencia dentro del mismo directorio donde se aloja la página PHP.

Ejemplos

Vamos a ver si existe un archivo llamado "mifichero.txt" en el mismo directorio que la página PHP:

if (file_exists("mifichero.txt")){
   echo "El fichero existe";
}else{
   echo "El fichero no existe";
}

Si quisiéramos comprobar si existe ese fichero dentro de un directorio determinado, bastaría con que escribiésemos la ruta de directorios sobre la que deseamos buscar el fichero.

file_exists("datos/mifichero.txt")

Esta función buscaría el archivo "mifichero.txt" dentro del subdirectorio "datos". Este subdirectorio "datos" estaría contenido dentro del directorio donde colocamos el script PHP.

Indicando rutas absolutas

También podríamos buscar un archivo indicando una ruta absoluta dentro del sistema de archivos del servidor. En este caso habría que comprobar si desde PHP tenemos permisos para acceder a la ruta en la que se pretende buscar el archivo, sobretodo si la ruta es externa al directorio de publicación del servidor.

file_exists("c:/mif.txt")

Esta función buscaría el archivo mif.txt en el directorio raíz del disco c:. Habría que ver si tenemos permisos para acceder al directorio raíz del disco.

Podemos averiguar la ruta del directorio de publicación de la página con la variable del entorno del servidor $_SERVER["DOCUMENT_ROOT"]. Podemos utilizar esta variable para generar la ruta absoluta a un archivo que pretendamos comprobar su existencia.

file_exists($_SERVER["DOCUMENT_ROOT"] . "\mifichero.txt")

Esta función buscaría el archivo "mifichero.txt" dentro de la raíz del directorio de publicación.

Nota:Como se puede ver, hemos utilizado el carácter "\" (contrabarra) para separar los directorios en la ruta de un archivo. Esto es porque estas líneas están extraídas de ejemplos de PHP realizados sobre el sistema Windows. En Windows se utilizan contrabarras para escribir rutas, mientras que en Linux se utiliza el carácter "/" (barra normal). Hay que tener cuidado para saber qué barra debemos utilizar en cada sistema, de lo contrario, podemos equivocarnos y entonces PHP puede tener problemas para localizar un fichero determinado.

Ejemplo: si existe un fichero, abrirlo y si no existe, crearlo

Ahora vamos a mostrar un código muy típico que sirve para abrir un fichero con un nombre dado. Primero habría que comprobar si existe o no existe ese fichero. Si existe, entonces lo abrimos tal cual está y si no existe, lo crearemos previamente a abrirlo.

if (file_exists("mifichero.txt")){
   echo "El fichero existe. Lo abro";
   $reffichero = fopen("mifichero.txt", "a");
}else{
   echo "El fichero no existe. Lo creo y abro.";
   $reffichero = fopen("mifichero.txt", "w+");
}

En este código, primero se comprueba la existencia del fichero. Si existe (caso afirmativo del if), se abre con el modo "a", que indica que se desea añadir información al fichero. Si no existe fichero (caso else del if), se abre con el modo "w+", que indica lectura y escritura y además indica que si no existe el fichero, se creará en el sistema de archivos en la ruta indicada.

Después de este código, el fichero está abierto para escritura, con lo cual, podemos operar sobre el fichero (escribiendo información) y luego deberíamos cerrarlo. El código sería como este:

//operar con el fichero
fwrite ($reffichero,"nuevo texto!!!!");
//cerrar el fichero
fclose ($reffichero);

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Carajodida

10/3/2006
Me parece una total estupidez ese código, basta con usar esto y listo:

$reffichero = fopen("mifichero.txt", "a");

si existe lo usa, si no existe lo crea... parece que no se dio cuenta el que escribio eso que el final de un archivo vacio es el principio...

gaviota

30/8/2006
en la siguiente página

http://www.php.net/file_exists

está el siguiente código que es el que sirve para determinar si una dirección url existe

<?php
function url_exists($url)
{
$handle = @fopen($url, "r");
if ($handle === false)
return false;
fclose($handle);
return true;
}
?>

Tutan

24/12/2006
Todo código es útil, y más aún cuando lo compartimos con la mejor voluntad del mundo. El problema radica en personas que no saben como utilizar ese código, o no tienen mucha idea de programacion y lo primero que hacen es buscar algo mejor y tratar de tirar por el suelo lo que fuera una ayuda valiosa.

Para mi, es un buén trabajo y una buena ayuda.

Ben

03/1/2011
Esta genial
Esta genial este funcion trabaja mucho mejor que if_existe y exec

carajopo

03/5/2011
que estupidez en verdad
si es un mediocre, para que pone cosas aqui si los que las leemos sabemos mas del tema, jajajja, es como un estudiante primiparo enseñandole a los profesores de PHP
Antes de colocar algo en la web y darlo por hecho, ombe documentese bien, el ejemplo de caraburrida es excelente y el del otro si es muy estúpido.
kua kua kua que osooooo

N.

22/8/2011
duda sobre codigo php
Salu2, estoy realizando un log con estos valores:

$ref = $_SERVER['HTTP_REFERER'];
$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

pero quisiera saber como hacer para que me guarde todas rutas que un usuario visite en mi sitio, acaso tengo que enlazar cada pagina al LOG para que me guarde la ruta ?

d antemano, gracias

Andres

03/3/2012
Opino Igual
Es verdad, los codigos que aca se colocan son para que las otras personas que no sepan mucha programacion lo utilicen, por ello esto es valioso, a veces algun codigo que no es util para unos es util para otros.

Juan

24/3/2012
Esto es increible
Hola a todos me gustaria saber esta gente que critica tanto el trabajo de los demas que hace buscando codigos si tan listos soys porque no los haceis vosotros.
PD:de desagradecidos esta el mindo lleno y de listos ni te cuento, Gracias por el trabajo a mi me funciono bien

Luis

26/7/2012
Consulta
Es muy bueno... no creo que todo mundo tenga memorizada la referencias de PHP..

Guillermo

13/3/2013
El código sirve y muy bien
Para Carajodida, le explicaré para qué sirve saber si existe un fichero:

Vamos a hacer un formulario para entregar los resultados de un trabajo por parte de los alumnos, queremos crear un fichero con los valores entregados, para ellos usamos como dices la apertura en modo "a" y así cada resultado de cada alumno lo pone a continuación (usando tabulador entre valores y retorno de línea entre alumnos).
¿Y si quiero poner en la primera línea del fichero un título para cada columna de valores?
1.- Podría crear manualmente el fichero con esos títulos para que los resultados se guarden a continuación.
2.- Podría usar la muy útil función aquí dada para que en caso de no existir el fichero pues lo cree con esos títulos de columna.

Hubo un tiempo en que el petróleo se usaba sólo para encender un fuego.