11
votes

Variables statiques à travers les sessions

dans asp.net si je déclare une variable (ou un objet) statique (ou si je fais un singleton), je peux le faire persister dans plusieurs sessions de plusieurs utilisateurs (il est enregistré dans un serveur Portée) Pour que je n'ai pas à l'initialiser à chaque demande.

Y a-t-il une telle fonctionnalité dans PHP? Merci


1 commentaires

Est-ce un cas d'utilisation pour Redis?


6 Réponses :


4
votes

Vous pouvez le faire avec une extension PHP (écrite en C).

Mais si vous voulez l'écrire en PHP, non. La meilleure alternative consiste à écrire la variable à un fichier (fichier_put_contents ()) à la fin de chaque requête et ouvrez-le au début de chaque demande (fichier_get_contents ()).

Cette alternative ne fonctionnera pas pour des sites de volume élevés, car les processus feront en lecture / écrire en même temps et que le monde ira tout Blaaa-Wooo-Eee-Wohhh-Booom.


1 commentaires

blaaa-wooo-eee-wohhh-biooom ? C'est mauvais, non? 😉



0
votes

Malheureusement, non. Le mot-clé Static de PHP est limité à l'instance de script en cours uniquement.

Pour persister les données sur les instances de script pour la même session, vous utiliseriez la Manipulation de la session Caractéristiques.

Pour persister les données entre les sessions, vous devez utiliser quelque chose comme Memcache , cependant, qui nécessite un travail de configuration supplémentaire sur le côté serveur.


0 commentaires

0
votes

Vous pouvez stocker des copies sérialisées d'un objet à l'intérieur de la session xxx

page suivante xxx


2 commentaires

IMO Cela partage la variable uniquement entre les pages de la même session: il n'est pas utile de partager entre plusieurs sessions ou plusieurs utilisateurs.


est une ancienne réponse, de nos jours, je recommanderais d'écrire un module, de nombreuses options telles que C ou C ++ pour écrire facilement un module partagé compilé.



7
votes

Vous pouvez configurer APC et utiliser les fonctions APC_STORE et APC_FETCH.

http://us.php.net/manual/en/book. apc.php


1 commentaires

Le lien est cassé.



4
votes

qui n'existe pas dans PHP, cependant, vous pouvez sérialiser les données et la mettre dans un fichier sur votre disque dur ou dans / dev / shm /. Vous pouvez également utiliser MemCache.

Si vous mettez vos données dans / Dev / SHM / ou utilisez MEMCACHE, les données disparaîtront sur redémarrage.


0 commentaires

0
votes

symfony et autres cadres utilise "phpfastcache" forte> qui prend en charge une large gamme de pilotes pour la mise en cache des données, notamment APC, SQLITE, MongODB ou simplement votre système de fichiers.

Vous pouvez le télécharger à https://github.com/phpsocialnetwork/phpfastcache p>

Voici un exemple avec fichier Caching: P>

use Phpfastcache\Helper\Psr16Adapter;

$defaultDriver = 'Files';
$Psr16Adapter = new Psr16Adapter($defaultDriver);

// Setter action
if(!$Psr16Adapter->has('test-key')) {
    $data = 'lorem ipsum';
    $Psr16Adapter->set('test-key', 'lorem ipsum', 300); // kept in cache for 300 seconds (5 minutes)
}

// Getter action
else {
    $data = $Psr16Adapter->get('test-key');
}


0 commentaires