Ultima revisión 17/02/2010
Solución al problema de los niveles de directorios en PHP
Cuando trabajamos bastante una página Web montada en PHP con muchas carpetas dentro, nos toparemos casi siempre con el problema de los directorios al incluir documentos en distintos directorios, pues siempre se debe especificar cuantas carpetas se desea retroceder (mediante “../”) ya que no hay opción para especificar una ruta absoluta.
La solución a este problema es bastante simple. Cree el siguiente código que debe ser incluido en la primera línea de todos los archivos PHP, en el que se cuentan los slashes (/) que determinan el número de carpetas donde se encuentra el archivo para retrocederlas y utilizarlas frente a las nuevas rutas que se necesiten.
<?php
$pagina = $_SERVER['PHP_SELF'];
$contar_slashes = substr_count($pagina, '/')-1;
for($i=1;$i<=$contar_slashes;$i++){
$nivel .= "../";
}
// Luego utilizamos la variable $nivel antepuesta a todas las funciones que requieran especificar un nivel de
// directorio, y que sea absoluto.
?>
Que lo podemos comprimir en una sola línea:
<?php for($i=1;$i <= substr_count($_SERVER['PHP_SELF'],'/')-1;$i++){$nivel .= "../";} ?>
Con un ejemplo, si nuestra página se encontrara 7 directorios adentro y deseamos hacer una inclusión de un archivo dentro de una carpeta llamada “includidos”, debemos incluir esta línea después del código anterior:
include($nivel.'incluidos/cabecera.php');
Así nos ahorraremos varias horas de desesperación cambiando los directorios cuando tenemos cientos de páginas dentro de carpetas bien organizadas. Quizas no te ha quedado muy claro, puedes descargar el siguiente ejemplo para que veas de que hablo.