image à lire avant un script

image à lire avant un script - PHP - Programmation

Marsh Posté le 30-11-2005 à 18:37:42    

Bonjour,
 
Je post car j'ai un petit problème : comment faire en sorte qu'une image soit intégralement chargée avant d'exécuter un javascript ?
 
 
Voilà comment ça se présente :
 
home.html :
-----------
 

Code :
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <SCRIPT type="text/javascript" src="http://www.monsite.com/script.php"></SCRIPT>
  6. <a href="http://www.monsite.com"><img src="http://www.monsite.com/image.png" border="0"></a>
  7. </body>
  8. </html>


 
.htaccess
---------

Code :
  1. Options +FollowSymLinks
  2. RewriteEngine  on
  3. RewriteBase    /
  4. RewriteRule ^image.png$ /image.php [L]


 
image.php
----------

Code :
  1. <?
  2. session_start();
  3. session_register("masession" );
  4. $i=0;
  5. $i++; $masession[$i]=Array("1","abc" );
  6. $i++; $masession[$i]=Array("2","def" );
  7. $i++; $masession[$i]=Array("3","ghi" );
  8. header( 'Content-type:image/png' );
  9. fpassthru( fopen( 'image-relle.png', 'rb' ) );
  10. exit();
  11. ?>


 
script.php :
-----------

Code :
  1. <?
  2. session_start();
  3. $a=$masession[1][1];
  4. $b=$masession[2][1];
  5. $c=$masession[3][1];
  6. unset($masession);
  7. session_destroy();
  8. $affichCheckSess = '
  9. 1 : '.$a.' <br>
  10. 2 : '.$b.' <br>
  11. 3 : '.$c.' <br>
  12. ';
  13. echo "document.write(\"'.$affichCheckSess.'\" );";
  14. ?>


 
 
Ce qui devrait se passer :  
1) home.html appelle image.png, qui est rerootée sur image.php.
2) image.php crée des variables de session et affiche ensuite l'image demandée.
3) home.html appelle script.php
4) script.php récupère ces variables et les affiche sur home.html avant l'image.
 
Ce qui se passe :  
script.php est appelé avant image.png, car il est placé avant sur home.html. Donc, mes variables de session ne sont pas récupérées, puisque pas encore crées.
 
LA QUESTION (on y vient  :pt1cable: ) :
 
Existe-t-il un moyen de faire en sorte que image.png soit chargé par le browser AVANT script.php, qui pourtant est lui meme placé avant image.png ??
 
Si qulqu'un a lu ça jusqu'au bout, j'ai déja de la chance...  :D

Reply

Marsh Posté le 30-11-2005 à 18:37:42   

Reply

Marsh Posté le 30-11-2005 à 18:47:51    

Houlà Bozo (t'as choisi ce nom exprès ? :D), tu mélanges js et php là.
Si tu veux que ton script PHP soit exécuté avant ton affichage de l'image, il faut l'inclure par <?php include('script.php'); ?> car comme l'indique ton "script src", c'est pour attacher un fichier javascript, pas PHP.
Connais-tu la grosse nuance qui différencie PHP de javascript ?

Reply

Marsh Posté le 30-11-2005 à 18:59:25    

PHP s'execute avant l'affichage (coté serveur), et JS après (coté client). Voila pour la GROSSE différence.
 
Mon <script src="script.php"> appelle une page PHP, c'est vrai, mais qui envoie du code JS.  
(exemple : <? echo "document.write("hello" );''; ?> ) Donc, de ce coté là, ça marche. Mon JS s'execute, mais Après l'affichage de l'image, et donc, il lui manque des variables
 
Et la ou tu vas rire, c'est que je ne peux pas mettre de code PHP sur home.html. home.html est destinée à etre hébergé sur plusieurs sites, dont certains ne peuvent employer PHP. Je doit donc trouver une autre solution. A mon avis, quelque chose à inclure dans le <head> ou dans les premieres lignes de script.php

Reply

Marsh Posté le 30-11-2005 à 19:11:40    

Autant pour moi pour le js en PHP.
 
Autrement inclu ton fichier image.php directement dans ton script.php.
Dans script.php, tu inclus image.php et document.write('<a href="http://www.monsite.com"><img src="http://www.monsite.com/image.png" border="0"></a>');
 
C'est pas super propre, mais bon, je vois que ça.
 

Reply

Marsh Posté le 30-11-2005 à 19:14:57    

Je dois impérativement dissocier les deux. image.png et script.php ne peuvent s'afficher ensemble. Ca peut paraitre bizarre, mais je fais une appli qui necessite 2 accès extérieurs depuis la meme page html pour jouer avec les variables de session. Mais merci quand meme !
 
Par contre, serait-il possible de faire "patienter" script.php lors de son execution, pour qu'il attende que les variables de session crées par image.png existent ?


Message édité par bozobuzu le 30-11-2005 à 19:17:10
Reply

Marsh Posté le 30-11-2005 à 20:03:25    

peut etre une solution cracra.
 

Code :
  1. define('SUPER_GRAND_NOMBRE', 999999); // mettre un nombre raisonable
  2. while($i<SUPER_GRAND_NOMBRE && !isset($_SESSION['var_cree_par_image_php']))
  3. {
  4.    ++$i;
  5. }
  6. # ici, la suite de script.php


 
 
je ne sais pas du tout ce que ca donnerait...
 
va-t-il "apprendre" les variables de session à la "volée" ?
 
sinon créer un fichier à la fin de image.php (ou modifier sa date de modification s'il existe déjà (touch())) et tester cette date dans script.php (dans le méga while):
 

Code :
  1. $now = microtime(); // je ne sais pas si ce sera le meme format que donné par filemtime()
  2. while($i<SUPER... && ($now < filemtime('fichier_test'))
  3. {
  4. }
  5. // sort de la boucle si le fichier a été créé après le début de script.php
  6. // ajouter une vérification au cas ou il est sorti à cause du $i


 


Message édité par art_dupond le 30-11-2005 à 20:07:46
Reply

Marsh Posté le 30-11-2005 à 21:43:17    

j'ai tenté la 1ere et la 2eme méthode. Erreur server. Il doit croire que je fais une boucle infinie ou qlq chose comme ça.
 
Et si je préchargeait l'image dans le <head> de home.html ? L'image serait chargée avant l'execution de script.php ?

Reply

Marsh Posté le 03-12-2005 à 01:13:09    

Reply

Marsh Posté le 03-12-2005 à 03:34:58    


Je déconseille pour des raisons évidentes.

Reply

Marsh Posté le 03-12-2005 à 03:53:39    

Et en appellant le javascript dans la partie onLoad de l'image ?


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Marsh Posté le 03-12-2005 à 03:53:39   

Reply

Marsh Posté le 03-12-2005 à 13:59:14    

The-Shadow a écrit :

Je déconseille pour des raisons évidentes.


tu peux expliquer pourquoi ? :jap:

Reply

Marsh Posté le 03-12-2005 à 16:49:52    

Je ferme la porte du garage quand ma voiture est dehors, si j'appuye sur un bouton qui dis à ma porte de garage de se fermer dans 10 secondes il peut y avoir 2 conséquences. Je sors ma voiture en 3 secondes et ma porte reste 7 secondes ouverte inutilement, si à la dixième seconde, je suis en plein millieu, je me fais écraser. :D
Bon, c'est une analogie, mais ça prouve que c'est tout sauf propre comme solution.

Reply

Marsh Posté le 03-12-2005 à 23:04:24    

ok c'est pas très propre mais y a moyen de s'en sortir avec un petit test non (et si au bout de 2 secondes, image.php n'est pas fini -> die('erreur, veuillez reloader la page') ) ?
 
sinon avec une page intermédiaire pour les variables de session qui renverrait sur cette page ?


---------------
oui oui
Reply

Marsh Posté le 03-12-2005 à 23:24:27    

y'a moyen effectivement, enfin, c'est un solution bancale, un script PHP dure souvent moins d'une seconde (heureusement) et il libère la mémoire quand il a fini. Le faire patienter 2 secondes, c'est occuper la mémoire 3 fois le temps nécessaire à son exécution. C'est bancale comme solution et ça met d'office le script dans la catégorie "Utilisation simultanée bridé à la base".

Reply

Marsh Posté le 04-12-2005 à 11:54:34    

Moi, je comprends pas trop ce qu'on veut faire.  
Un script qui va chercher l'image, stocke genre les dimensions ou le poids dans des variables de session et l'affiche dans le flux, et un autre script qui affiche le lien de l'image et les caractéristiques de l'image récupéré dans la cession ?
Pourquoi ne pas avoir un script qui affiche l'image et un autre qui va aussi chercher l'image et obtient ces informations ? Ca fait 2 accès à la même image mais là j'ai l'impression qu'on veut s'épargner ça en introduisant de l'attente active, ça n'a pas de sens ... enfin si j'ai bien compris.


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Marsh Posté le 05-12-2005 à 18:01:30    

Effectivement, vu les vitesses de connexion actuelle, je pense 2 accès à la page, ce n'est plus dérangeant que 1. D'autant plus que c'est uniquement pour passer du petit code ou de la petite image...


Message édité par bozobuzu le 05-12-2005 à 18:01:52
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed