[PHP]Problème avec les variables de session

Problème avec les variables de session [PHP] - PHP - Programmation

Marsh Posté le 28-04-2004 à 12:01:27    

Voilà, je débute en PHP, et j'aimerais bien utiliser des variables de session.
Je viens de faire pas mal de tuto, et j'ai utilisé la fonction recherche du forum, mais je suis tombé sur rien de bien concluant, donc je vous expose mon problème : j'arrive pas à utiliser les variables de session. Je peux sans problème utiliser l'identifiant de session, mais impossible d'utiliser des variables.
 
J'essaie de passer la valeur d'un compteur d'une page à une autre (juste pour des tests), mais la 2eme page n'arrive pas à lire la valeur du compteur
 
Mon code :
 
test1.php

Code :
  1. <?php
  2. session_start();
  3. echo '<html><body>';
  4. if (!isset($_SESSION['compteur'])) {
  5.     $_SESSION['compteur'] = 0;
  6.  echo 'compteur non assigné';
  7. } else {
  8.      $_SESSION['compteur']++;
  9.  echo 'compteur assigné';
  10. }
  11. echo 'Compteur : '.$_SESSION['compteur'].'<br/>';
  12. echo session_id();
  13. echo '<br/><a href="test2.php">Cliquez ici</a><br/>';
  14. if (!isset($_SESSION['compteur'])) {
  15.     $_SESSION['compteur'] = 0;
  16.  echo 'compteur non assigné';
  17. } else {
  18.      $_SESSION['compteur']++;
  19.  echo 'compteur assigné';
  20. }
  21. echo '</body></html>';
  22. ?>


 
test2.php

Code :
  1. <?php
  2. session_start();
  3. echo $_SESSION['compteur'].'<br/>';
  4. echo session_id();
  5. ?>


 
Et quand j'arrive à test2.php, je ne vois que l'ID de la session, et pas la valeur du compteur...
 
J'espère que c'est juste une erreur toute con !!
Merci à vous !
 
Eidt : j'utilise PHP4.3.1


Message édité par matlu le 28-04-2004 à 12:06:39
Reply

Marsh Posté le 28-04-2004 à 12:01:27   

Reply

Marsh Posté le 28-04-2004 à 12:07:16    

kfman a écrit :

Quelle version de PHP ?


4.3.1 : je l'écrivais au moment où tu as posé la question  :)
 
Edit : et tu as supprimé ton message au moment où je te répondais !! lol


Message édité par matlu le 28-04-2004 à 12:07:48
Reply

Marsh Posté le 28-04-2004 à 12:08:10    

En modifiant:
 
echo '<br/><a href="test2.php">Cliquez ici</a><br/>';  
par
echo '<br/><a href="test2.php?'.SID.'">Cliquez ici</a><br/>';  
 
Ca donne koi ?


Message édité par kfman le 28-04-2004 à 12:10:56

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 12:10:13    

ça écrit test2.php?SID dans la barre d'adresse (chais pas si c normal)
mais de tte façon, j'arrive déjà à le récupérer l'identifiant dans test2.php (avec session_id())

Reply

Marsh Posté le 28-04-2004 à 12:11:09    

Je m'étais planté :o
 
Je vais tester chez moi.


Message édité par kfman le 28-04-2004 à 12:11:37

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 12:12:30    

ça pourrait pas venir du php.ini ?

Reply

Marsh Posté le 28-04-2004 à 12:18:53    

Mince mon message n'a pas été pris en compte.
C'est justement ce que je te disais...
 
As-tu bien configuré tes sessions dans ce fichier ? (le chemin temporaire par exemple)


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 13:16:12    

ben ouais, je crois...
 

Code :
  1. session.save_path='C:/Program Files/Apache Group/Apache2/htdocs/mat'
  2. session.cookie_lifetime=300


 
y'a d'autres trucs à mettre concernant les sessions ?


Message édité par matlu le 28-04-2004 à 13:17:10
Reply

Marsh Posté le 28-04-2004 à 13:20:05    

Non.
Mais tu peux modifier les rapports du gc pour faire démarrer une fois sur dix par exemple...


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 13:22:38    

kfman a écrit :

Non.
Mais tu peux modifier les rapports du gc pour faire démarrer une fois sur dix par exemple...


euh, g pas compris...
 
tu veux pas m'envoyer ton php.ini ?


Message édité par matlu le 28-04-2004 à 13:33:07
Reply

Marsh Posté le 28-04-2004 à 13:22:38   

Reply

Marsh Posté le 28-04-2004 à 13:43:06    

bon, ben je crois ke je te dois un grand merci !!!
ton php.ini a résolu le pb !!!!!!
 
merci merci merci !!!
 
 :jap:  :jap:  :jap:  
 :love:  :love:  :love:

Reply

Marsh Posté le 28-04-2004 à 13:44:31    

100? [:le kneu]


Message édité par kfman le 28-04-2004 à 13:44:43

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 13:49:22    

bon, ça les vaut bien, ils t'attendent ds ma poche !!
 
lol

Reply

Marsh Posté le 28-04-2004 à 13:50:23    

LOL
Essaie de voir où était l'erreur quand même... :o


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 13:51:30    

tiens, tant que t'es là, tu saurais pas comment savoir qu'un téléchargement côté client est fini ?
ou alors existe-t-il une instruction bloquante qui fasse en sorte qu'un script php soit bloqué tant que le téléchargement du client n'est pas fini ?

Reply

Marsh Posté le 28-04-2004 à 13:54:19    

je sais pas d'où vient l'erreur, parce que tous les paramètres de ton fichier autres que ceux que je t'ai filé sont ceux par défaut (enfin je crois)...
 
EDIT : mon gc_divisor était à 1000 au lieu de 10 pour toi, mais il dit qu'il voit pas le rapport...


Message édité par matlu le 28-04-2004 à 13:58:41
Reply

Marsh Posté le 28-04-2004 à 13:54:25    

100 balles et un Mars, aussi... [:le kneu]
Nan sérieux, explique le contexte...


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 13:55:15    

je fais télécharger une appli au client avec un readfile, et j'aimerais savoir quand il a fini de la télécharger, pour pouvoir logger cet événement

Reply

Marsh Posté le 28-04-2004 à 14:08:31    

Citation :

7.30.69 readfile()
Affiche un fichier
[ Exemples avec readfile ]   PHP 3, PHP 4 , PHP 5
 
int  readfile ( string   filename , bool   use_include_path , resource   context )  
readfile lit le fichier filename et l'envoie à la sortie standard.  
 
readfile retourne le nombre d'octets lus depuis le fichier. Si une erreur survient, retourne FALSE , et à moins que la fonction n'ait été appelée avec @readfile, un message d'erreur est affiché.  
 
Vous pouvez utiliser une URL comme nom de fichier avec cette fonction, si l'option des "fopen wrappers" a été activée. Voyez fopen pour plus de détails.
 
Vous pouvez utiliser le deuxième paramètre optionnel pour explorer le dossier include_path , en passant la valeur de 1.


 
T'as essayé avec le code de retour ?
 


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 14:14:10    

ouais, mais en fait, ça me met le début de lecture du fichier et la fin dans la même seconde, ce qui, en GPRS, me semble un peu rapide pour un fichier de 100Ko...

Reply

Marsh Posté le 28-04-2004 à 14:21:53    

Sinon en balayant la doc php, tu pourrais peut être essayer ça (jamais testé):
 
- fopen sur ton hote distant en binaire.
- envoi avec fwrite tant que pas feof.
 


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 14:23:06    

ouais, je vais essayer ça

Reply

Marsh Posté le 28-04-2004 à 14:34:24    

kfman a écrit :

Sinon en balayant la doc php, tu pourrais peut être essayer ça (jamais testé):
 
- fopen sur ton hote distant en binaire.
- envoi avec fwrite tant que pas feof.


 
Ou alors avec fsockopen...


---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 14:51:50    

Bon j'ai bricolé ça vite fait. Ca à l'air de fonctionner chez moi....
 

Citation :

<?php
 
$file1 = fopen("belier.doc","rb" ); //ouverture en binaire de belier.doc
 
header("Content-disposition: inline; filename=transfert.xxx" ); //mode download
header("Content-type: application/octet-stream" ); //pour le navigateur
 
while (!feof($file1)) { //tranfert tant que lecture pas finie
$octet = fread($file1,1); //lecture d'un octet
print $octet; //envoi de l'octet vers la sortie standard (navigateur)
}
 
fclose($file1);
 
?>


Message édité par kfman le 28-04-2004 à 14:55:32

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 28-04-2004 à 14:52:42    

yep, c'est ce que j'étais en train de regarder, parce que sinon, je vois pas comment écrire ds le flux html avec fwrite

Reply

Marsh Posté le 28-04-2004 à 15:23:44    

YEEEEEAAAAAAAHHHHHHHH, ça marche !!!!!!!!
 
enfin ça me met des temps de transfert un peu chelou (7s pour 50Ko en GPRS; ça fait peu), mais bon...
 
encore une fois, MERCIIIIIIII


Message édité par matlu le 28-04-2004 à 15:39:54
Reply

Marsh Posté le 29-04-2004 à 10:32:40    

bon, après tests un peu plus poussés, il semble que le temps etre le début et la fin de la boucle ne soit pas le temps de transfert du fichier, mais le temps de lecture du fichier par le serveur...
zut zut zut !!

Reply

Marsh Posté le 29-04-2004 à 11:13:33    

Essaye ce code:
 

Citation :

<?php
 
$scriptname = basename($_SERVER['PHP_SELF']);
$file1 = fopen("belier.doc","rb" ); //ouverture en binaire
$file2 = fopen("$scriptname.log","w+" ); //fichier de log
 
header("Content-Type: application/octet-stream" ); //mode download
header("Content-Disposition: attachment; filename=transfert.xxx" ); //pour navigateur
$start = getmicrotime();
$code = fpassthru($file1); //transfert
$stop = getmicrotime();
 
$diff = round($stop - $start,3);
 
$date = date("D d M Y" );
$heure = date("H:i:s" );
 
fwrite($file2,"$scriptname - $code octet(s) transféré(s) en $diff sec - $date @ $heure" );
fclose($file2);
 
 
/* Fonctions */
 
function getmicrotime(){  
    list($usec, $sec) = explode(" ",microtime());  
    return ((float)$usec + (float)$sec);  
    }  
?>


Message édité par kfman le 29-04-2004 à 11:19:37

---------------
"Nous allons reformater les français" © Nicolas Sarkozy
Reply

Marsh Posté le 29-04-2004 à 11:39:56    

en fait, je viens de réaliser un truc : ça ne peut pas mesurer le bon temps, parce que je t'ai mal expliqué le contexte dans lequel je me situe : c pour mesurer le temps que met un terminal mobile pour télécharger une appli java.
 
et avec ton code (et je pense qu'en fait, la première version marchait aussi), on mesure le temps que met la gateway pour récupérer l'appli (enfin je suppose)...
 
cela expliquerait les temps super bizarres que j'obtenais (en mettant fread($file1,1024), j'obtenais 1sec pour transférer une appli de 120Ko, ce qui parait impossible en GPRS, mais est déjà beaucoup plus vraisemblable en réseau local...)
 
enfin en tout cas, merci de m'avoir aidé !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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