Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/01/2008, 02:44
Avatar de PatomaS
PatomaS
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: En alguna otra parte
Mensajes: 4.656
Antigüedad: 20 años, 2 meses
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