Foros del Web » Programando para Internet » PHP »

El curioso caso de las distintas rutas iguales - [solucionado]

Estas en el tema de El curioso caso de las distintas rutas iguales - [solucionado] en el foro de PHP en Foros del Web. Hola gente Hoy se me ha presentado una situación por demás extraña, al menos así la he percibido yo, a ver que opinan al respecto ...
  #1 (permalink)  
Antiguo 22/01/2008, 02:44
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Pregunta El curioso caso de las distintas rutas iguales - [solucionado]

Hola gente

Hoy se me ha presentado una situación por demás extraña, al menos así la he percibido yo, a ver que opinan al respecto o si tienen la justificación que no he sido capaz de encontrar.

Premisas:
  1. El sitio usa php (obvio) versión 5.2.5.
  2. Sistema operativo Gentoo (Linux).
  3. El sitio en cuestión se maneja desde un único index.php en la raíz.
  4. El .htaccess se encarga de que toda petición por archivos .php vaya al /index.php.
  5. El .htaccess se encarga de que cualquier imagen no sea redireccionada más si solicitada a su ubicación correcta.
  6. En la raíz del sitio hay una carpeta kernel con todos los archivos que "trabajan", osea, constantes, funciones, etc.
  7. En la raíz hay una carpeta de temas en la que se hayan diferentes estéticas
  8. En la carpeta kernel, hay un archivo llamado "inclusiones.php" que es quien maneja las comprobaciones de archivo y hace las inclusiones de archivo ajustándose siempre a la ruta desde donde son llamados.
  9. Esta mecánica la he usado en muchos sitios ya.
  10. Una imagen que llamo para ser incluida, es incluida correctamente.
  11. No hay errores de inclusiones ni llamadas a archivos de forma errónea en los logs de apache.
  12. No pueden hacerse peticiones fuera de la raíz del sitio. Ej http://sitio.local/../lo_que_sea/ fallaría
  13. La URL de la página que hace la petición es: http://sitio.local/admin/archivo.php

El problema:
La misma imagen que se incluye correctamente, hace que falle el getimagesize(), el cual uso para obtener los datos de la imagen y así usarlos en la etiqueta <img>.

El error arrojado es de tipo Warning, exactamente es este:
Código:
Warning: getimagesize(../temas/basico/imagenes/imagen.png) [function.getimagesize]: failed to open stream: No such file or directory in /mnt/webs/sitio/kernel/inclusiones.php on line xxx
Esquema del sitio:
Código:
/
/index.php
/kernel
/kernel/inclusiones.php
/temas/basico
/temas/basico/imagenes

Llamada a la imagen:
Código:
$imagen1 = incluir( "imagen.png","imagen_tema" );
incluir = función que se encarga de las inclusiones.


Construcción del nombre del archivo:
Código:
$archivo_a_montar = $profundidad."temas/".$_SESSION["tema"]."/imagenes/".$archivo;
$profundidad = niveles necesarios para estar en la ruta correcta
$archivo = parámetro que contiene el nombre del archivo

Ejemplo de resultado de la función anterior:
Código:
../temas/basico/imagenes/imagen.png
Código del getimagesize() que actualmente funciona:
Código:
$datos_imagen = getimagesize( "temas/".$_SESSION["tema"]."/imagenes/".$archivo );
Como ven, la cadena de inclusión empieza en "tema" y no en "../"

Código del getimagesize() que hasta hoy siempre había funcionado:
Código:
$datos_imagen = getimagesize( $archivo_a_montar );
Tras lo que he planteado, veo que la inclusión de la imagen se hace descendiendo un nivel desde /admin hasta la raíz para luego entrar en /temas. Sin embargo, el getimagesize() tiene problemas con eso y requiere empezar desde temas directamente.

Esto me lleva a pensar algo bastante absurdo y es que el comportamiento parece ubicar o posicionar a mi función en el archivo /admin/archivo.php y al getimagesize() en /index.php.

Si alguien tiene alguna teoría o quiere ayudarme a ver donde esta mi error, se lo agradecería ya que ciertamente estoy un poco extrañado.

Gracias por todo.

Felicidad
__________________
¡ hey, hou, hou, hey !

Última edición por PatomaS; 22/01/2008 a las 06:59 Razón: problema resuelto
  #2 (permalink)  
Antiguo 22/01/2008, 03:05
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Re: El curioso caso de las distintas rutas iguales

A ver si me aclaro. Todo codigo php es redirigido a index.php, asi que para entendernos, siempre es como si llamases a index.php (incluso cuando llamas a /admin/archivo.php. Si es asi, es normal que desde index.php no tengas que poner los ../ en el getimagesize(), ya que es el acceso via sistema de ficheros.

asi que no veo tu problema. A no ser, claro esta, que no entiendas porque en el HTML generado para admin/archivo.php tienes que poner ese ../ . Si es eso, es muy sencillo. Ese html es interpretado por el navegador, no por tu php. Para tu navegador estas en el directorio sitio.com/admin/ , asi que para indicar sitio.com/temas tienes que poner el ../ . El navegador solo coge lo que aparece en la barra de direcciones y le añade el src.

Son dos sistemas de referencia distintos usados por 2 programas distintos: PHP usa el sistema de ficheros del sistema operativo (/home/usuario/html/...), mientras que el navegador (HTML) usa las URLs (http://sitio.com/admin/archivo.php).
  #3 (permalink)  
Antiguo 22/01/2008, 03:23
Avatar de PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 1 mes
Puntos: 63
Re: El curioso caso de las distintas rutas iguales

Hola

Ciertamente obvio.

El árbol no me dejaba ver el bosque.

¿qué puedo decir? No tengo perdón alguno. Cuando uno se cierra, se cierra y no hay manera de verlo.

Gracias.

Felicidad
__________________
¡ hey, hou, hou, hey !
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 07:58.