Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Passer des parametres a un script CGI interne

7 réponses
Avatar
patrice.karatchentzeff
Bonjour,

Le probleme: j'ai un script CGI qui inclut un autre script CGI pour
afficher une image =E0 la vol=E9e du genre :

<img src=3D"script2.cgi">

Or, dans le script initial, je calcule un certain nombre de donn=E9es
que je place dans une liste et je voudrai aussi utiliser cette liste
pour fabriquer mon image dans le script embarqu=E9.

Or, je n'arrive pas =E0 partager mon espace de nommage entre les deux...
je m'y prends certainement mal mais je n'y comprends rien (cf.
http://perl.enstimac.fr/ModulesFr/CGI.html#importer%20tous%20les%20param%E8=
tres%20dans%20un%20espace%20de%20nommage.
J'ai beau avoir lu cette documentation pourtant).

Pour info, m=EAme si j'appelle un use CGI dans mes deux scripts, je
forge =E0 la main toutes les infos de HTML.

J'anticipe sur une remarque : je ne peux recalculer le tableau dans le
script 2 car le calcul est assez co=FBteux (appel =E0 des requ=EAtes SQL
notamment) et je vais devoir afficher un certain nombre d'images comme
cela...

J'en suis =E0 envisager d'=E9crire un fichier temporaire avec le
r=E9sultat de la liste... mais c'est assez bof... y compris en
performance pure...

Une id=E9e ?

Merci d'avance,

PK

7 réponses

Avatar
Jacques Caron
Salut,

On 8 Jun 2005 01:14:08 -0700,
wrote:

Le probleme: j'ai un script CGI qui inclut un autre script CGI pour
afficher une image à la volée du genre :

<img src="script2.cgi">

Or, dans le script initial, je calcule un certain nombre de données
que je place dans une liste et je voudrai aussi utiliser cette liste
pour fabriquer mon image dans le script embarqué.

Or, je n'arrive pas à partager mon espace de nommage entre les deux...


Normal, il n'est pas commun, chaque invocation de CGI est indépendante des
autres. Plusieurs solutions:
- exporter les paramètres voulus dans l'URL, et les récupérer de l'autre
côté
- les sauvegarder dans un fichier temporaire et les récupérer de l'autre
côté
- les sauvegarder dans une base de données ou un cache commun et les
récupérer de l'autre côté
- même chose que les deux solutions précédentes mais en calculant l'image
directement dans le premier script, le deuxième ne faisant que "cracher"
le résultat sans réfléchir

Pour la première solution, il y a une limite à la taille des URLs
supportées par tous les navigateurs, serveurs, proxies, etc, donc c'est
vite assez limité. Et il faut transformer les données en une chaîne de
caractère et évidemment l'URL-encoder.

Pour la deuxième solution, ça ne marche que s'il n'y a qu'un seul serveur
(ou que le load balancing respecte des sessions).

Pour la deuxième et la troisième solution, il faut probablement "mettre à
plat" les données puis les décoder à l'autre bout, mais il y a plus de
souplesse que dans le cas du passage en paramètre dans l'URL. Voir
Storable pour une solution simple. Ce n'est pas nécessaire si le système
utilisé le fait pour vous (comme le fait Cache::Memcached par exemple).

J'en suis à envisager d'écrire un fichier temporaire avec le
résultat de la liste... mais c'est assez bof... y compris en
performance pure...

Une idée ?


Cache::Memcached, ou une BDD, ou éventuellement quelque chose construit
autour d'un peu de SHM, mais je pense que ça ferait beaucoup de travail
pour rien. Et non, il n'y a pas d'autre solution, puisque les deux
processus perl sont complètement séparés.

Jacques.

Avatar
Nicolas George
"Jacques Caron" wrote in message :
- même chose que les deux solutions précédentes mais en calculant l'image
directement dans le premier script, le deuxième ne faisant que "cracher"
le résultat sans réfléchir


Il y a une autre solution sur ce modèle, qui consiste à utiliser une image
avec une URL en data:, ce qui permet d'embarquer directement une image dans
l'URL. Par exemple :

<img src="data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAQElEQVQI12WOOQ4AMQgDxyv+/+XZ
BoKUUBkfsqMCJJxToJp1eRI0AkJoLf1+E+cCI5yKAbXGXAldamus3vfM/QE08xoLlVcA+QAAAABJ
RU5ErkJggg= " alt="&#x263A;"/>

On se tape les 33% de taille supplémentaire à cause du base64, mais ça a
l'avantage d'être très simple du point de vue infrastructure.

Sinon, si l'image est fondamentalement vectorielle (un graphique par
exemple), le plus élégant serait probablement de faire du XHTML+SVG.

Avatar
patrice.karatchentzeff
OK, c'est bien ce qu'il me semblait.

Merci pour l'info...

PK
Avatar
Emmanuel Florac
Le Wed, 08 Jun 2005 01:14:08 -0700, a
écrit :


Le probleme: j'ai un script CGI qui inclut un autre script CGI pour
afficher une image à la volée du genre :

<img src="script2.cgi">


Tu peux utiliser aussi CGI::Session, c'est fait exactement pour ça,
permettre de créer un contexte de données commun entre plusieurs scripts
et/ou plusieurs éxécutions du même script.

--
L'esprit qu'on veut avoir gâte celui qu'on a.
Jean-Baptiste Louis Grisset.

Avatar
Denis -esp2008-
Bonjour,

OK, c'est bien ce qu'il me semblait.


Oui enfin plutôt que de réinventer la roue il ne faut pas oublier qu'il
existe de nombreux modules permettant la gestion de sessions http:
http://search.cpan.org/search?query=session&mode=module

--
Denis

Avatar
TiChou
Dans le message <news:d86n4e$qr2$,
*Nicolas George* tapota sur f.c.l.perl :

iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAQElEQVQI12WOOQ4AMQgDxyv+
/+XZBoKUUBkfsqMCJJxToJp1eRI0AkJoLf1+E+cCI5yKAbXGXAldamus3vfM/QE08xoLlVcA
+QAAAABJRU5ErkJggg=
:-))


--
TiChou

Avatar
Jacques Caron
Salut,

On Wed, 8 Jun 2005 12:08:46 +0000 (UTC), Nicolas George
<nicolas$ wrote:

Il y a une autre solution sur ce modèle, qui consiste à utiliser une
image avec une URL en data:, ce qui permet d'embarquer directement une
image dans l'URL.


Je dois avouer que je la connaissais pas, celle-là. La question qui tue:
c'est largement implémenté dans les différents navigateurs, y compris avec
des images un peu grandes, ou c'est le loto?

Jacques.