Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/04/2009, 07:41
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Includes y rutas

Una cosa importante que tienen que entender todos es que PHP y HTML se ejecutan en dos ambitos diferentes, por ende las rutas son totalmente diferentes en ambos lenguajes.

Cuando tu haces un include/require desde PHP, necesitas pasarle la ruta absoluta/relativa pero desde el sistema de archivos, es lo importante, ya que cuando lo haces en HTML le pasas la ruta relativa/absoluta pero desde el Document_Root, es decir, un path como:
Código:
/home/users/foo/public_html/images/image.jpg
Es una ruta absoluta desde el sistema de archivos, pero desde un URL configurado con el DOCUMENT_ROOT en public_html, la ruta es:
Código:
/images/image.jpg
Por ende no puedes mezclar desde PHP y desde HTML las mismas rutas y esperar los mismos resultados, ya que en PHP, la ruta relativa se toma desde el script que se este ejecutando, es decir si tienes por ejemplo:
index:
Código php:
Ver original
  1. include( 'foo.php');

foo:
Código php:
Ver original
  1. include( 'libs/bar.php' );

libs/bar.php:
Código php:
Ver original
  1. include( 'libs/baz.php' );

libs/baz.php:
Código php:
Ver original
  1. echo "foo-bar-baz";

Si ejecutas index.php, podrás ver que no hay ningún problema y se imprime "foo-bar-baz", pero si ejecutas directamente libs/bar.php, te marcara errores de que baz no existe, y esto es porque esta tratando de incluir libs/libs/baz.php.

Por eso cuando se trabaja en PHP lo más recomendable es definir el base_path, esto lo haces viendo donde estas parado (usando getcwd() para imprimir la ruta), y así ya tienes un path absoluto, luego haces algo así:
Código php:
Ver original
  1. <?php
  2. define('BASE_PATH', '/home/users/foo/public_html/' );

Posteriormente para incluir tus archivos solamente lo haces desde el base_path y así evitas problemas con las rutas:
Código php:
Ver original
  1. include( BASE_PATH . 'foo.php' );

Saludos.