> Manuales > Manual de PHP

Algunos casos en los que colocar archivos fuera del directorio de publicación tiene sentido y utilidad.

Por decir algo más sobre el tema de colocar los archivos, quería señalar que cualquier cosa que pongamos fuera del directorio de publicación no podrá ser accedida a través del navegador. Es decir, si creamos un directorio que se llame funciones_php en el mismo nivel que el directorio de publicación (fuera del directorio de publicación) no podremos acceder con el explorador a los archivos que coloquemos dentro de ninguna de las maneras. Esto es así porque la URL de inicio de nuestro alojamiento corresponde con ese directorio y no podemos movernos hacia debajo de ese directorio con las URLs, que son la manera de especificar al navegador los recursos a los que se quiere acceder.

Nota: Ya se explicó lo que era el directorio de publicación en el capítulo anterior sobre Subir archivos PHP al servidor.

No sería posible salir del directorio de publicación con una URL como esta, por mucho que utilicemos el operador .. (que sirve para acceder al directorio padre).

http://www.midominio.com/../funciones_php/archivo_inalcanzable.php

Sin embargo, colocar algunos contenidos fuera del directorio de publicación puede ser muy útil. Por ejemplo, podríamos colocar allí copias de seguridad de algunos archivos o documentos que simplemente queremos guardar en el servidor para acceder a ellos desde cualquier parte y con nuestro programa de FTP.

Hay otra utilidad más interesante sobre colocar archivos fuera del directorio de publicación. Se trata de que muchas veces utilizamos en nuestros programas trozos de código repetidamente, por ejemplo, para abrir y cerrar bases de datos, para mostrar la cabecera de nuestro portal, para comprobar que un email escrito en un formulario es correcto, etc. Es muy útil separar estos trozos de código en un archivo a parte y llamar a este archivo con las funciones PHP include() o require(). Así, si un día modificamos la cabecera de nuestro portal, sólo lo tendremos que modificar en un archivo, o, si cambia la base de datos que utilizamos sólo tendríamos que modificar el archivo que hace la conexión a la base de datos una vez, en lugar de ir cambiándolo en todas las páginas PHP que abrían las bases de datos.

Estos archivos no son páginas independientes, sino trozos. Seguramente, si los ejecutamos por separado no mostrarían ningún resultado válido, incluso podrían dar mensajes de error. Por esta razón merece la pena colocarlos en un lugar donde nadie pueda tener acceso: fuera del directorio de publicación. Con PHP si que podremos acceder a ese directorio para incluir esos archivos. Solamente deberíamos utilizar las funciones PHP include() o require() indicando la ruta para acceder a los archivos.

En el caso de que tengamos una página llamada hola.php en el directorio de publicación y un archivo, que se llama abre_base_datos.php, en el directorio funciones_php, que está fuera del directorio de publicación, si quisiéramos acceder (desde hola.php) al archivo que abre la base de datos lo haríamos así.

include("../funciones_php/abre_base_datos.php")

Desde PHP sí que podemos acceder a los archivos que se encuentran fuera del directorio de publicación. Para ello especificamos la ruta adecuada, en la que utilizamos el operador .. para bajar al directorio padre.

Nada más que decir sobre la colocación de los archivos: una vez situados en el directorio de publicación se podrá acceder a ellos con nuestro navegador y se deberían ejecutar perfectamente. Aunque cabe señalar que, tanto PHP como el servidor donde trabajemos, pueden tener configuraciones distintas y puede que algún detalle de la programación de nuestras páginas no funcione correctamente.

Por ejemplo, nuestro PHP puede declarar o no automáticamente las variables que llegan a través de un formulario. Si en local si que estaba configurado para hacer esto y en remoto no, deberíamos localizar los lugares donde recogemos las variables y utilizar las variables de entorno correctas (mirar artículo sobre Procesar variables de formularios y los comentarios al pie para saber más de esta posible fuente de errores).

Aunque este no es un caso habitual, podemos ponernos en contacto con nuestro proveedor de alojamiento para ver si pueden ayudarnos configurando el sistema o indicando los pasos a seguir para solventar en nuestros scripts el asunto.

Comentario: el siguiente script calcula el nivel de directorio de los scripts que queremos incluir en la página actual.
// Hallamos el nivel de directorio en que está ubicada la página 
1. Se hace un recuento de los caracteres que contiene el nombre del script 
actual. 
- 
$Chars = count_chars($PHP_SELF,1); 
- 
2. Exploramos la tabla de los caracteres devueltos buscando el carácter ('/' 
Código 47 ) de directorio (carpeta) que devuelve Apache. 
- 
foreach ($Chars as $Char=>$nChars){ 
   if ($Char==47) {$n=$nChars;break;} 
} 
- 
3. Generamos una cadena de n-1 veces con la subcandena "../" que nos da el 
nivel de directorio en que se encuentra el script. 
- 
if ($n==0) $PathString=""; else $PathString=str_pad("",($n-1)*3,"../");

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual