Pregunta

Estoy trabajando en una aplicación web en la que se utilizan imágenes creadas dinámicamente para mostrar información. Estos datos se envían actualmente a las imágenes usando una cadena de consulta GET, pero con imágenes y datos más complejos, me preocupa tener problemas con el límite de caracteres de URL.

Simplemente podría pasar el ID de registro a la imagen y hacer que esta consulta en la base de datos, pero esto obviamente aumentaría la demanda en el servidor. ¿Hay alguna forma de agregar una imagen recuperada usando POST en un documento HTML?

¿Fue útil?

Solución

Al final, creo que consultar la base de datos probablemente será más rápido. Obtener una cadena pequeña (digamos hasta 2000 caracteres) de la base de datos es muy rápida y probablemente más rápida que hacer que el usuario la publique todo el tiempo, especialmente si hay más de 1 en una página.

La mejor opción sería crear la imagen una vez y guardarla en caché si no cambia. Cuando la imagen se solicite nuevamente, verifique si está en caché y simplemente use readfile () para enviarla al navegador. Me gusta almacenar la imagen en caché fuera de la raíz del documento para que otros no puedan acceder a ella, pero esto puede no ser un factor en lo que está haciendo (tanto el almacenamiento en caché como la privacidad).

La SESIÓN puede ser una opción, pero esta es la mejor opción cuando necesita regenerar la imagen en varias páginas con ligeros cambios, por lo que no tiene que consultar la base de datos cada vez.

Otros consejos

No es fácil: HTML no incluye ningún soporte intrínseco para enviar múltiples solicitudes POST y representar los resultados como recursos en línea, como lo hace con < img / > < script / > y otras etiquetas que definen un atributo SRC.

Incluso las soluciones alternativas de AJAX podrían no ayudarte aquí. Cambiar el atributo SRC de una imagen es fácil, pero todo lo que hará es hacer que el navegador OBTENGA la nueva imagen (del caché o del servidor, dependiendo de su configuración). En realidad, cambiar el contenido de la imagen a una respuesta binaria de un HTTP POST es mucho más complicado, aunque podría analizar codificar en base64 el flujo de respuesta y utilizar el esquema de datos: URL para mostrar la imagen resultante en tu página.

Siempre puede tener un formulario con " Haga clic para ver la imagen " como botón de envío, por supuesto: envía el formulario, el servidor responde con datos de imagen / jpeg y su navegador lo muestra como una imagen independiente. Sin embargo, estoy bastante seguro de que no puedes hacerlo en línea.

Una opción podría ser almacenar estos datos en una variable de sesión. Debería hacer algunas pruebas para ver de qué manera sus servidores lo manejan mejor

Para ampliar el comentario de Darryl Hein:

  
    

Con esto, recomendaría eliminarlo de la SESIÓN una vez que haya terminado con él. Si está ahí todo el tiempo, PHP lo cargará en cada llamada de página, no solo en la imagen & Quot; page & Quot ;. & # 8211; Darryl Hein

  

Sí, pensé en esto y estoy de acuerdo, no quieres obstruir los tubos con datos de sesión innecesarios, pero ¿qué pasa si no sabes cuándo eliminar los datos? No puede simplemente eliminar los datos de la sesión después de crear la imagen, ¿y si la imagen se va a mostrar dos veces? A menos que las imágenes mismas se almacenen en caché durante un cierto período de tiempo.

Algo como esto

Página de solicitud

<? //index.php
    $_SESSION['imagedata']['header'] = array('name'=>'Simon','backgroundcolor'=>'red');
    echo '<img src="image.php?image=header">';
    // more stuff
    echo '<img src="image.php?image=header">'; // same image
?>    

Script de imagen

<?  //image.php
    switch($_GET['image']){
        case 'header':
            if(isSet($_SESSION['imagedata']['header'])){
                // create image using $_SESSION['imagedata']['header'] data
                // create cached image
                unset($_SESSION['imagedata']['header']);
            else if(cache_file_exists()){
                // display cached file
            }else{
                // no data, use plan B
            }
        break;
    }
?>

Si la imagen puede ser identificada por una identificación, simplemente utilícela. Asumiendo que la misma identificación debería producir la misma imagen cada vez, solo use algún proxy para servir las imágenes usando el soporte de almacenamiento en caché HTTP estándar.

En algunos escenarios y bajo algunas limitaciones, podría usar un Iframe donde desea que aparezca su imagen y publicar con un atributo de destino que apunte a ese iframe.

para que la página principal tenga un iframe. la página principal tiene un formulario que publica el marco I y el servidor devuelve una imagen que se muestra en el iframe.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top