- Detalles
- Por Juan Padial
- En Programación
- Visto: 3353
En muchas ocasiones es necesario conocer la ruta hacia un archivo o directorio. Si utilizamos PHP la podemos obtener fácilmente utilizando la función dirname() de PHP y la variable predefinida __FILE__.
Supongamos que vamos a utilizar la función include para incluir el archivo model.php desde el archivo scipt.php y que ambos se encuentran en nuestro servidor según la siguiente estructura:
- /hombe/usuario1/public_html/aplication/script.php
- /hombe/usuario1/public_html/models/model.php
Para utilizar la función include, require u otras que requieran la ruta hacia un archivo (vea include vs require), podemos utilizar la ruta relativa o la ruta absoluta. Es importante conocer las diferencias entre ambas. El siguiente código incluiría el archivo model.php desde el archivo script.php utilizando la ruta en forma absoluta:
include("/hombe/usuario1/public_html/models/model.php"); //ruta absoluta
En el siguiente código se utiliza ruta relativa (nota la falta de "/" al principio de la ruta):
include("model.php"); //ruta relativa
El código anterior nos dará error pues al indicar una ruta relativa PHP buscará en el directorio actual, el directorio dónde está el script PHP que se está ejecutando. En este caso estaría buscando el archivo "/hombe/usuario1/public_html/aplication/model.php", el cuál no existe. En el siguiente ejemplo buscaría "/hombe/usuario1/public_html/aplication/hombe/usuario1/public_html/models/model.php" (nota que no se ha puesto "/" al principio por lo que es una ruta relativa):
include("hombe/usuario1/public_html/models/model.php"); //ruta relativa
Si queremos utilizar ruta relativa en este ejemplo tendríamos que hacer uso de "/../". Los dos puntos le dirán a PHP "sube un nivel y busca la ruta relativa desde ahí". En este caso, la ruta relativa correcta para poner en el archivo script.php sería:
include("/../models/model.php"); //ruta relativa
Si lo necesitamos podemos utilizar tantos /../ como niveles haya que subir, por ejemplo "/../../../ruta/relativa/archivo.php" subiría tres niveles.
¿Cómo puedo conocer la ruta absoluta de un archivo o directorio con PHP?
Si no conocemos la ruta absoluta hacia un determinado archivo o directorio, podemos obtenerlo mediante el uso de la variable predefinida __FILE__, que contiene la ruta absoluta del archivo en el que se utilice. Por ejemplo, el siguiente código puesto en nuestro archivo script.php produciría "/hombe/usuario1/public_html/aplication/script.php":
<?php echo __FILE__; ?>
Si queremos solo la ruta hacia el directorio, sin el nombre del archivo, podemos utilizar la función dirname():
<?php $directorio = dirname(__FILE__); echo $directorio; ?>
Desde PHP 5.3.0 está disponible también la variable predefinida __DIR__ que es equivalente a dirname(__FILE__). El siguiente código sería equivalente al anterior:
<?php $directorio = __DIR__; echo $directorio; ?>
¿Es mejor utilizar rutas absolutas o relativas?
Pues dependerá de la situación y de las preferencias de cada uno. Personalmente prefiero utilizar siempre rutas absolutas pero sin codificar la ruta especifica de un servidor dado (para que si cambiamos de servidor no tengamos que modificar el código). Esto lo podemos conseguir definiendo una variable que contenga la ruta absoluta del directorio raíz de nuestra aplicación y hacer esta variable disponible en otros archivos que la necesiten. Por ejemplo, si a la estructura anterior añadimos el siguiente archivo index.php situado en la carpeta public_html:
<?php
define("RUTA_ABS",dirname(__FILE__));
include(RUTA_ABS."/aplication/script.php");
?>
En el archivo script.php podríamos utilizar la siguiente ruta absoluta para incluir el archivo model.php:
<?php include(RUTA_ABS."/models/model.php"); ?>
Espero que os haya servido esta pequeña explicación sobre las rutas absolutas y relativas en PHP. Os recomiendo además repasar el manual PHP, concretamente variables predefinidas PHP y dirname.
Creado el 08 06 2012 Actualizado el 12 07 2012
