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:
- El sitio usa php (obvio) versión 5.2.5.
- Sistema operativo Gentoo (Linux).
- El sitio en cuestión se maneja desde un único index.php en la raíz.
- El .htaccess se encarga de que toda petición por archivos .php vaya al /index.php.
- El .htaccess se encarga de que cualquier imagen no sea redireccionada más si solicitada a su ubicación correcta.
- En la raíz del sitio hay una carpeta kernel con todos los archivos que "trabajan", osea, constantes, funciones, etc.
- En la raíz hay una carpeta de temas en la que se hayan diferentes estéticas
- 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.
- Esta mecánica la he usado en muchos sitios ya.
- Una imagen que llamo para ser incluida, es incluida correctamente.
- No hay errores de inclusiones ni llamadas a archivos de forma errónea en los logs de apache.
- No pueden hacerse peticiones fuera de la raíz del sitio. Ej http://sitio.local/../lo_que_sea/ fallaría
- 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:
Esquema del sitio: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
Código:
/ /index.php /kernel /kernel/inclusiones.php /temas/basico /temas/basico/imagenes
Llamada a la imagen:
Código:
incluir = función que se encarga de las inclusiones.$imagen1 = incluir( "imagen.png","imagen_tema" );
Construcción del nombre del archivo:
Código:
$profundidad = niveles necesarios para estar en la ruta correcta$archivo_a_montar = $profundidad."temas/".$_SESSION["tema"]."/imagenes/".$archivo;
$archivo = parámetro que contiene el nombre del archivo
Ejemplo de resultado de la función anterior:
Código:
Código del getimagesize() que actualmente funciona:../temas/basico/imagenes/imagen.png
Código:
Como ven, la cadena de inclusión empieza en "tema" y no en "../"$datos_imagen = getimagesize( "temas/".$_SESSION["tema"]."/imagenes/".$archivo );
Código del getimagesize() que hasta hoy siempre había funcionado:
Código:
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.$datos_imagen = getimagesize( $archivo_a_montar );
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