2011-03-27 19 views
5

Tengo un archivo css que enlaza con imágenes.Sirviendo imágenes CSS con PHP desde una carpeta pública externa

.test{ 
    background: url(http://site.com/dynamic/test.jpg) no-repeat; 
} 

Sin embargo, estas imágenes son dinámicas. Cambian por minuto, así que tengo que generarlos y servirlos con php. Esto significa que no los guardo en la carpeta pública. Solo les sirvo directamente desde el script php.

El problema es cuando visito el script php (http://site.com/dynamic/test.jpg), genera la imagen correctamente y puedo verla en el navegador, pero cuando se usa la misma url en el archivo css que necesito, el css puede ' parecen tener acceso a las imágenes.

Creo que es porque la imagen no se guarda en la carpeta pública y es entregada por php lo que significa que la imagen tiene que ser llamada directamente para ser generada, y llamar al archivo css no llega al script php (URL de la imagen).

¿Alguien tiene ideas para resolver este problema?

+1

No importa cómo se crean las imágenes, todo es lo mismo para CSS. Si tiene Firebug instalado, eche un vistazo al netpanel y vea si está recibiendo errores cuando las imágenes están intentando cargarse. – JohnP

+0

solo curiosidad, ¿por qué estás haciendo referencia a .jpg, si un script php lo está generando, no sería test.php? (a menos que tenga la extensión jpg procesada por el compilador php, que sería impar) – Ben

+1

@mazzzzz: OP probablemente está analizando '$ _SERVER ['REQUEST_URI']' o algo similar para extraer la ruta virtual. O usando 'mod_rewrite'. Numerosas formas de enmascarar esto. –

Respuesta

1

intenta devolver el tipo de contenido usando la función php header

header("Content-type: application/force-download"); 
header('Content-Type: application/octet-stream'); 
header('Content-Type: image/jpeg'); // or png... 
+0

Un encabezado de control de caché tampoco daña, ya que estas son imágenes que se actualizan cada minuto. * header ("Cache-Control: no-cache, must-revalidate"); * – Marcel

+0

por lo tanto, ¿sugiere que creamos una acción cuyo encabezado de respuesta incluya estas instrucciones? ¿Puedes publicar algún código? – Prasad

-2

En primer lugar usted debe preguntar a su propio sistema de lo que está pasando, no a las personas que no tienen idea ni el acceso a su sitio.

Utilice algún sniffer HTTP para ver exactamente qué solicitudes HTTP se envían y qué respuestas devuelven. LiveHTTPHeader o firebug addons para Firefox o lo que sea de este tipo se puede utilizar.

Luego compare estos encabezados con los que obtiene solicitando esta imagen directamente.
Luego puede hacer su pregunta aquí, proporcionando estos encabezados.

Cuestiones relacionadas