Foros del Web » Programando para Internet » PHP »

Includes y rutas

Estas en el tema de Includes y rutas en el foro de PHP en Foros del Web. Hola, hoy programando e visto una cosa un tanto rara, digamos que tengo dos archivos php y una imagen: Código: imagen.jpg index.php modulos/juego/juego.php La cosa ...
  #1 (permalink)  
Antiguo 13/04/2009, 05:02
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 18 años, 7 meses
Puntos: 5
Pregunta Includes y rutas

Hola, hoy programando e visto una cosa un tanto rara, digamos que tengo dos archivos php y una imagen:
Código:
imagen.jpg
index.php
modulos/juego/juego.php
La cosa es que en el archivo index.php incluyo el archivo juego.php:
Código PHP:
include("modulos/juego/juego.php"); 
Bien, pues aqui viene lo raro a mi parecer... el contenido del archivo juego.php es:
Código HTML:
<img src="../../imagen.jpg/> 
Es una ruta relativa a partir del archivo juego.php, pues si lo hago de esta manera:
Código HTML:
<img src="imagen.jpg"/> 
¡Tambien funciona!

¿Entonces que? vamos a ver, el archivo juego.php se incluye en index.php y luego se incluye la imagen o viceversa... pero que valgan las dos?

Alguien me lo puede explicar porque no se de que forma incluir ficheros entonces...

Gracias!
  #2 (permalink)  
Antiguo 13/04/2009, 05:51
 
Fecha de Ingreso: abril-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Respuesta: Includes y rutas

Por lo que entiendo el archivo "imagen.jpg" esta alojado en la carpeta ...modulos/juego/imagen.jpg... al igual que el archivo ""juego.php""

Como estas realizando el link parece logico, porque..

<img src="../../imagen.jpg"> es igual a <img src="modulos/juego/imagen.jpg"> y si lo llamas <img src="imagen.jpg"> funciona igual porque esta alojado en la misma carpeta...

se entiende??
  #3 (permalink)  
Antiguo 13/04/2009, 06:02
Avatar de zeuslife  
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 533
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Includes y rutas

Totalmente cierto. Es decir, es lo mismo llamar al archivo desde la misma carpeta, diciendo solo su nombre, que indicar la raíz entera del sitio. Yo, personalmente, prefiero la forma
Código PHP:
<? include("../../esto.php"); ?>
, ya que si le añades una carpeta más, donde está el archivo esto.php, con añadir otra barra y otros dos puntitos, ya está!. De la otra forma, tendrias que indicar la nueva carpeta, y el nombre del archivo de nuevo...e imaginate hacer esto con 15 carperas, con nombres muy largos...

Un saludo!
  #4 (permalink)  
Antiguo 13/04/2009, 07:13
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Includes y rutas

Bueno, lo otro es q en los meta del sitio o la aplicación se este utinizando el meta "base" y dee sta manera al indicar la ruta de la imagen sea diferente a los includes.

Ej:

Código HTML:
<base href="toma_como_base_este_directoio_o-url/" /> 
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #5 (permalink)  
Antiguo 13/04/2009, 07:23
Avatar de danistrein  
Fecha de Ingreso: septiembre-2008
Ubicación: Salta Capital
Mensajes: 550
Antigüedad: 15 años, 7 meses
Puntos: 9
Respuesta: Includes y rutas

mm yo que sepa comense hace dias nomas a manejar los includes y no importa donde esten los modulos igual te los toma como si fuera el index es decir a partir de la ruta que esta el index tendrias que direcionar ej:


en una carpeta esta asi:
Código PHP:
imagen.jpg
index
.php
modulos
/juego/juego.php 

el include
Código PHP:
include("modulos/juego/juego.php"); 



y tienes que ponerla comunmente como si lo tubieses poniendo desde el index.
asi poniendolo en el juego.php :
Código PHP:
<img src="imagen.jpg"/> 
xD yo ago asi y me funciona re bien bueno noce ahy distintas clases de programacion :P
  #6 (permalink)  
Antiguo 13/04/2009, 07:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:06.