Frage

Ich arbeite an einer Web-Anwendung, in der dynamisch erstellten Bilder verwendet werden, um Informationen anzuzeigen. Diese Daten werden zur Zeit auf die Bilder gesendet einen GET-Abfrage-String verwenden, aber mit komplexeren Bildern und Daten, die ich mache mir Sorgen um mit der URL Zeichenbegrenzung Probleme ausgeführt werden.

Ich kann einfach die Datensatz-ID an das Bild übergeben und habe diese Abfrage auf die Datenbank, aber dies würde offensichtlich die Nachfrage auf dem Server erhöhen. Gibt es irgendeine Weise, die ich ein Bild hinzufügen könnte POST in ein HTML-Dokument abgerufen wird?

War es hilfreich?

Lösung

Am Ende, denke ich Quering die Datenbank wahrscheinlich schneller sein wird. Um eine kleine Schnur zu erhalten (beispielsweise bis zu 2000 Zeichen) aus der Datenbank sehr schnell ist und wahrscheinlich schneller, als wenn der Benutzer per Post des ganze Zeit, vor allem, wenn es mehr als 1 auf einer Seite.

Die beste Option wäre, das Bild zu erstellen, sobald es gespeichert werden, wenn sie sich nicht ändert. Wenn das Bild erneut angefordert wird, zu überprüfen, um zu sehen, ob es zwischengespeichert und verwendet nur readfile (), um den Browser zu senden. Ich mag die im Cache gespeicherten Bild außerhalb der doc Wurzel speichern, damit sie von anderen nicht zugänglich sind, aber das kann keinen Faktor in dem, was Sie tun (beide Caching und die Privatsphäre).

Die Sitzung könnte eine Option sein, aber dies ist die beste Option, wenn Sie das Bild auf mehreren Seiten mit geringfügigen Änderungen regenerieren müssen, so dass Sie sich nicht Abfrage der db jedes Mal.

Andere Tipps

Nicht leicht - HTML enthält keine intrinsische Unterstützung für mehr POST-Anfragen zu senden und die Ergebnisse als Inline-Ressourcen zu machen, wie sie mit und andere Tags, die ein SRC-Attribut definieren

Auch AJAX Abhilfen können Sie hier nicht helfen. Ändern des SRC-Attribut eines Bildes ist einfach, aber alles, was tun, ist der Browser das neue Bild (aus dem Cache oder dem Server, je nach Konfiguration) zu erhalten. Eigentlich Änderung der Inhalte des Bildes auf eine binäre Antwort von einem HTTP-POST ist viel mehr beteiligt - obwohl Sie in Base64-Codierung des Antwortstream aussehen könnte und mit Hilfe der Daten: URL-Schema das resultierende Bild anzuzeigen auf Ihrer Seite.

Sie können jederzeit ein Formular mit „Auf dem Bild klicken, um“ als Submit-Button, natürlich - Sie das Formular abschicken, antwortet der Server mit Bild / JPEG-Daten und Ihr Browser zeigt es als eigenständiges Bild. Ich bin mir ziemlich sicher, dass Sie es nicht tun können, inline, aber.

Eine Option könnte diese Daten in einer Session-Variablen zu speichern sein. Sie sollten einige Tests durchführen, um zu sehen, welchen Weg Ihr Server (n) behandeln es besser

Zur Erweiterung auf Darryl Hein Kommentar:

  
    

Damit würde ich empfehlen, es aus der Sitzung entfernen, nachdem Sie mit ihm fertig sind. Wenn es dort die ganze Zeit ist, lädt PHP es auf jeder Seite Ruf, nicht nur das Bild „Seite“. - Darryl Hein

  

Ja ich dachte darüber nach und sind damit einverstanden, Sie mögen nicht die Rohre mit nicht benötigten Sitzungsdaten verstopfen, aber was, wenn Sie nicht wissen, wann die Daten entfernen? Sie können nicht nur die Session-Daten löschen, nachdem das Bild erzeugt wird, was passiert, wenn das Bild zweimal angezeigt werden soll? Es sei denn, die Bilder selbst sind für einen bestimmten Zeitraum zwischengespeichert.

So etwas

anfordern Seite

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

Bild Skript

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

Wenn das Bild durch eine ID identifiziert wird, nur, dass verwenden. Unter der Annahme, dass die gleiche ID soll das gleiche Bild erzeugt jedes Mal nur einen Proxy-Server verwenden, um die Bilder unter Verwendung von Standard-HTTP-Caching-Unterstützung zu dienen.

In einigen Szenarien und unter einigen Einschränkungen könnten Sie einen Iframe verwenden, wo Sie Ihr Bild wollen apear und Post mit einem Zielattribut zu diesem iframe zeigt.

, so dass die Haupt-Seite hat einen Iframe. die Haupt-Seite hat eine Form, die die I-Frame und der Server gibt ein Bild postet, die im iframe angezeigt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top