Question

Je travaille sur une application Web dans laquelle des images créées dynamiquement sont utilisées pour afficher des informations. Ces données sont actuellement envoyées aux images à l'aide d'une chaîne de requête GET, mais avec des images et des données plus complexes, je suis inquiet de rencontrer des problèmes avec la limite de caractères dans l'URL.

Je pourrais simplement passer l'ID d'enregistrement à l'image et faire en sorte que la requête soit interrogée dans la base de données, mais cela augmenterait évidemment la demande sur le serveur. Est-il possible d'ajouter une image récupérée à l'aide de POST dans un document HTML?

Était-ce utile?

La solution

Au final, je pense que l'interrogation de la base de données sera probablement plus rapide. Obtenir une petite chaîne (jusqu’à 2000 caractères) dans la base de données est très rapide et probablement plus rapide que si l’utilisateur la publiait tout le temps, surtout s’il y en avait plus que 1 sur une page.

La meilleure option serait de créer l’image une fois et de la mettre en cache si elle ne change pas. Lorsque l'image est à nouveau demandée, vérifiez si elle est mise en cache et utilisez simplement readfile () pour l'envoyer au navigateur. J'aime stocker l'image en cache en dehors de la racine du document afin qu'elle ne soit pas accessible par d'autres personnes, mais cela peut ne pas être un facteur dans ce que vous faites (mise en cache et confidentialité).

La SESSION est peut-être une option, mais c’est la meilleure option lorsque vous devez régénérer l’image sur plusieurs pages avec de légères modifications. Vous n'avez donc pas à interroger la base de données à chaque fois.

Autres conseils

Pas facilement - HTML ne comprend aucun support intrinsèque pour l'envoi de plusieurs requêtes POST et le rendu des résultats sous forme de ressources en ligne, contrairement à < img / > < script / > et d'autres balises qui définissent un attribut SRC.

Même les solutions de contournement AJAX pourraient ne pas vous aider ici. Changer l'attribut SRC d'une image est facile, mais tout ce que vous ferez est que le navigateur obtienne la nouvelle image (à partir du cache ou du serveur, selon votre configuration). Remplacer le contenu de l'image par une réponse binaire HTTP POST est beaucoup plus compliqué. Vous pouvez toutefois envisager de coder en base64 le flux de réponse et d'utiliser le schéma data: URL pour afficher l'image résultante. dans votre page.

Vous pouvez toujours avoir un formulaire avec " Cliquez pour voir l'image " bien sûr, en tant que bouton d'envoi, vous soumettez le formulaire, le serveur répond avec des données image / jpeg et votre navigateur l'affiche sous la forme d'une image autonome. Je suis presque sûr que vous ne pouvez pas le faire en ligne, cependant.

Une option pourrait être de stocker ces données dans une variable de session. Vous devriez faire quelques tests pour voir de quelle manière votre serveur (s) le gère mieux

Pour développer le commentaire de Darryl Hein:

  
    

Avec cela, je vous recommande de le supprimer de la SESSION une fois que vous avez terminé. S'il y est présent tout le temps, PHP le chargera à chaque appel de page, pas seulement à l'image & "Page &". & # 8211; Darryl Hein

  

Oui, j'y ai réfléchi et je suis d'accord, vous ne voulez pas obstruer les tubes avec des données de session inutiles, mais que se passe-t-il si vous ne savez pas quand supprimer les données? Vous ne pouvez pas simplement supprimer les données de la session après la création de l'image. Que se passe-t-il si l'image doit être affichée deux fois? Sauf si les images elles-mêmes sont mises en cache pendant un certain temps.

Quelque chose comme ça

Page de demande

<? //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 d'image

<?  //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 l'image peut être identifiée par un identifiant, utilisez-la simplement. En supposant que le même identifiant produise la même image à chaque fois, il suffit d'utiliser un proxy pour servir les images à l'aide du support de la mise en cache HTTP standard.

Dans certains scénarios et dans certaines limites, vous pouvez utiliser un iframe dans lequel vous souhaitez que votre image s'affiche et que vous la publiez avec un attribut cible pointant vers cette iframe.

donc la page principale a un iframe. la page principale a un formulaire qui affiche le cadre I et le serveur renvoie une image affichée dans l'iframe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top