Page 1 sur 1

Variables intersession

Posté : 30 juin 2007, 16:30
par MainMa
J'avais une question bête... Est-ce qu'on peut créer des variables PHP "globales", indépendantes de la session du client ?

Par exemple, j'ai un site qui pour chaque session doit charger un grand tableau de données (en lecture seule) qui sera utilisé ensuite sur chaque page. Si ce tableau prend par exemple 500 Ko, avec 100 clients seulement en même temps sur le serveur on arrive à env. 50 Mo. Or, le tableau étant en lecture seule, je veux le charger une seule fois dans la mémoire lors de la première connexion du premier utilisation et le garder dans la mémoire jusqu'à un éventuel redémarrage du serveur.

C'possible, ce truc ?



PS. Il y a le $_SERVER, mais si j'ai bien compris, faut pas l'utiliser pour écrire quelque chose, mais seulement pour lire ce qu'il y a dedans. C'est bien ça ?

Posté : 08 juil. 2007, 01:42
par sadeq
Utilise un fichier que les pages concernées peuvent lire.

Posté : 08 juil. 2007, 11:03
par MainMa
Parce que finalement, il n'y a pas de variables intersession en PHP ? Mais comment qu'ils font les sites pour ne pas surcharger leurs serveurs ?

De toute façon, de passer par un fichier revient à la même chose (ou presque, puisque de lire un fichier ordinaire ou de passer par serialize doit être plus rapide que d'analyser à chaque début de session un fichier XML), puisque les données que j'utilise sont les mêmes pour toutes les sessions, mais ce n'est pas pour autant qu'elles seront affichées d'une manière identique (pas dans le même ordre par exemple), et donc je dois les avoir dans la mémoire pour pouvoir bien les manipuler.

Posté : 08 juil. 2007, 11:23
par Sékiltoyai
D'après toi, dans quoi elles sont stockées les données de session sinon dans des fichiers ?
Ce que tu peux faire, c'est d'écrire un fichier php contenant ces données à partir de ton script :
<?php

$handle = fopen($file, $mode);
fwrite($handle, '<?php ');
foreach($data as $var=>$value)
{
   fwrite($handle, '$' . $var . "='" . str_replace(array('\\','\''), array('\\\\', '\\\''), $value) . "';\n";
}
fclose($handle);

?>

Posté : 08 juil. 2007, 18:58
par MainMa
D'après toi, dans quoi elles sont stockées les données de session sinon dans des fichiers ?
Selon moi, dans la RAM de l'ordi.
Ce que tu peux faire, c'est d'écrire un fichier php contenant ces données à partir de ton script :
J'vois ça, oui... (Pas mal comme idée ! :wink: )

Mais c'est alors que surement je n'ai rien compris dès le début dans le fonctionnement de PHP. Lorsque j'écris :
$hello = 'Hello World!';
ce Hello World! est bien dans la RAM ? Et c'est pareil pour:
$_SESSION['hello'] = 'Hello World!';
non ?

Et si j'ai juste, en ayant les variables dans $_SESSION pour 2 Mo, avec 100 utilisateurs connectés en même temps sur mon serveur je dois avoir un peu plus de 200 Mo de RAM occupée rien que par le serveur. Non ? Sinon, j'avoue alors de ne pas trop saisir le concept des sessions et de tout ça...

Posté : 08 juil. 2007, 19:15
par Sékiltoyai
Il ne faut pas confondre le comportement des variables de sessions pendant l'exécution du script, et hors de son exécution.
Les variables de session sont en permanence stoquées dans des fichiers sur le disque, de manière à ne pas prendre de place dans la ram, et être accessibles à tout moment, donc quand on a 100 sessions de 2 Mo en même temps, on a pas 200Mo de RAM mobilisés, heureusement.
Lors de l'exécution du script, les variables de session sont récupérées dans les fichiers pour être copiées dans les variables php les représentant, c'est ici qu'elles passent dans la RAM, mais tu remarqueras quil y a des accès de fichier, donc c'est comme si tu lisais toi même (c'est peut être un chouia plus rapide puisque c'est du C, mais dans le principe, c'est dans les 2 cas un accès disque. Une fois dans la RAM, tu les utilises comme des variables normales, et à la fin du script, elles sont réécrites dans les fichiers, c'est donc seulement à l'exécuition que les 2Mo de session passent dans la RAM, et sachant que dans les sites bien faits, l'exécution du script prend moins d'un dixième de seconde, c'est indolore pour la consommation permanente de ressources...

Posté : 08 juil. 2007, 21:21
par MainMa
Ah bah tout va bien alors. Dans ce cas, ma question d'origine n'a plus lieu d'être.

Merci donc pour ses explications détaillées et merci aussi à tous ceux qui m'ont répondu.