Domanda

Sto lavorando a un'applicazione Web in cui le immagini create dinamicamente vengono utilizzate per visualizzare informazioni. Questi dati sono attualmente inviati alle immagini usando una stringa di query GET ma con immagini e dati più complessi sono preoccupato di incorrere in problemi con il limite di caratteri dell'URL.

Potrei semplicemente passare l'ID record all'immagine e avere questa query nel database, ma questo ovviamente aumenterebbe la domanda sul server. C'è un modo per aggiungere un'immagine recuperata utilizzando POST in un documento HTML?

È stato utile?

Soluzione

Alla fine, penso che interrogare il database sarà probabilmente più veloce. Ottenere una stringa di dimensioni ridotte (diciamo fino a 2000 caratteri) dal database è molto veloce e probabilmente più veloce rispetto al fatto che l'utente lo pubblichi continuamente, specialmente se ce n'è più di 1 su una pagina.

L'opzione migliore sarebbe creare una volta l'immagine e memorizzarla nella cache se non cambia. Quando l'immagine viene richiesta di nuovo, controlla se è memorizzata nella cache e usa semplicemente readfile () per inviarla al browser. Mi piace memorizzare l'immagine memorizzata nella cache al di fuori della radice del documento in modo che non sia accessibile da altri, ma questo potrebbe non essere un fattore in ciò che stai facendo (sia nella cache che nella privacy).

La SESSIONE potrebbe essere un'opzione, ma questa è l'opzione migliore quando è necessario rigenerare l'immagine su più pagine con lievi modifiche, quindi non è necessario interrogare il db ogni volta.

Altri suggerimenti

Non facilmente: HTML non include alcun supporto intrinseco per l'invio di più richieste POST e il rendering dei risultati come risorse incorporate, come avviene con < img / > < script / > e altri tag che definiscono un attributo SRC.

Anche le soluzioni alternative AJAX potrebbero non aiutarti qui. Modificare l'attributo SRC di un'immagine è semplice, ma tutto ciò che farà è far sì che il browser OTTIENI la nuova immagine (dalla cache o dal server, a seconda della configurazione). La modifica effettiva del contenuto dell'immagine in una risposta binaria da un POST HTTP è molto più complessa, sebbene sia possibile esaminare la codifica base64 del flusso di risposta e utilizzare lo schema data: URL per visualizzare l'immagine risultante nella tua pagina.

Puoi sempre avere un modulo con " Fai clic per visualizzare l'immagine " come pulsante di invio, ovviamente: invii il modulo, il server risponde con dati immagine / jpeg e il tuo browser lo visualizza come immagine autonoma. Sono abbastanza sicuro che non puoi farlo in linea, però.

Un'opzione potrebbe essere quella di archiviare questi dati in una variabile di sessione. Dovresti fare alcuni test per vedere in che modo i tuoi server lo gestiscono meglio

Per espandere il commento di Darryl Hein:

  
    

Con questo, ti consiglio di rimuoverlo dalla SESSIONE dopo aver finito. Se è sempre lì, PHP lo caricherà su ogni chiamata di pagina, non solo sull'immagine & Quot; pagina & Quot ;. & # 8211; Darryl Hein

  

Sì, ci ho pensato e sono d'accordo, non vuoi ostruire i tubi con dati di sessione non necessari, ma cosa succede se non sai quando rimuovere i dati? Non puoi semplicemente eliminare i dati della sessione dopo aver creato l'immagine, cosa succede se l'immagine deve essere visualizzata due volte? A meno che le immagini stesse non vengano memorizzate nella cache per un certo periodo di tempo.

Qualcosa del genere

Pagina di richiesta

<? //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 di immagine

<?  //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;
    }
?>

Se l'immagine può essere identificata da un ID, basta usarlo. Supponendo che lo stesso ID dovrebbe produrre la stessa immagine ogni volta che usi solo un proxy per servire le immagini usando il supporto standard per la memorizzazione nella cache HTTP.

In alcuni scenari e sotto alcune limitazioni potresti usare un Iframe in cui vuoi che l'immagine appaia e pubblichi con un attributo target che punta a quell'iframe.

quindi la pagina principale ha un iframe. la pagina principale ha un modulo che pubblica il frame I e il server restituisce un'immagine che viene visualizzata nell'iframe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top