IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Variables statiques et PHP


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Variables statiques et PHP
    Bonjour,

    je cherche comment definir des variables statiques en PHP. Attention, statique dans le sens Java, parce qu'apparemment les variables statiques en PHP ca n'a rien a voir.

    Donc ce que je veux, c'est definir une variable tel que :
    - si je modifie la valeur lors d'une requete, je dois retrouver ma valeur lors de la requete suivante.
    - si un utilisateur effectue une requete qui modifie la variable, cela impacte egalement les autres utilisateurs.

    Si vous connaissez le Java, ce que je veux, c'est donc exactement ce qu'est une variable statique en Java.

    C'est possible de faire ca en PHP?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Points : 123
    Points
    123
    Par défaut
    Salut,

    Il me semble qu'en PHP les variables sont plus ou moins toutes "static" au sens de JAVA. Tu as aussi les variables de session qui poussent l'exemple à son paroxysme.

    Cordialement,

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Evilam Voir le message
    Salut,

    Il me semble qu'en PHP les variables sont plus ou moins toutes "static" au sens de JAVA. Tu as aussi les variables de session qui poussent l'exemple à son paroxysme.

    Cordialement,

    Non, d'apres les tests que je suis en train de faire, ca n'a rien a voir.
    Ce dont j'ai besoin, c'est encore au-dela des variables de session : la variable doit en effet etre partagee par toutes les sessions.

    Une idee?

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    En fait mon besoin fonctionnel est le suivant : j'aimerais definir un "mode maintenance" sur un site web. Un administrateur va en back-office, passe le site en mode maintenance, et ca impacte instantanement tous les utilisateurs.

    Mon idee etait donc d'utiliser une simple variable partagee par toutes les sessions, mais je n'ai pas l'impression que cela soit possible en PHP. Comment feriez-vous pour developper un tel "mode maintenance"?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Points : 123
    Points
    123
    Par défaut
    Tu peux mieux définir ceci s'il te plait ? :
    ca impacte instantanement tous les utilisateurs.

  6. #6
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Mon idee etait donc d'utiliser une simple variable partagee par toutes les sessions, mais je n'ai pas l'impression que cela soit possible en PHP. Comment feriez-vous pour developper un tel "mode maintenance"?
    Les variables php ne persistent pas d'une requête à l'autre. Quand on veut avoir cette persistance, on utilise une base de données ou des fichiers.
    Ton "mode maintenance" pourrait simplement dépendre de la valeur d'un champ dans ta base de donnée.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par goodpz Voir le message
    Les variables php ne persistent pas d'une requête à l'autre. Quand on veut avoir cette persistance, on utilise une base de données ou des fichiers.
    Ton "mode maintenance" pourrait simplement dépendre de la valeur d'un champ dans ta base de donnée.
    Et bien si, on peut faire persister des donnees d'une requete a l'autre en passant par le tableau de session. Il n'y a pas un autre tableau qui lui serait partage par tous les utilisateurs?

    Alors effectivement, il y a bien la solution d'ecrire dans un fichier ou dans une base de donnees, mais c'est vraiment sortir l'artillerie lourde pour pas grande chose. En plus de ca ca m'oblige a faire une lecture en base de donnees ou un acces disque a chaque requete!! Dans mon cas precis effectivement ca ne pose pas de probleme, mais pour certains projets adopter ce fonctionnement est juste impossible. Au boulot je bosse sur un projet a "hautes performances" en Java. Si je faisais un acces base de donnees ou une lecture disque a chaque requete je me fairais tuer, c'est dramatique du point de vue des performances.

    Si ce n'est vraiment pas possible de creer des variables statiques au sens Java, c'est une limite terrible au langage.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Evilam Voir le message
    Tu peux mieux définir ceci s'il te plait ? :

    Et bien le mode manitenance consiste a afficher une page de maintenance quelque soit la requete effectuee par l'utilisateur.
    Donc : un administrateur effectue la modification en back-office, et, a partir de ce moment, n'importe quel utilisateur qui effectue une requete sur le site tombe sur la page de maintenance.

  9. #9
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    l'idée est de passé par un fichier de variable dans lequel l'admin positionne une valeur. Je ne pense pas que l'utilisation de session soit nécessaire.

    Exemple:
    un fichier global.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $isOnline= true/false  //ici ton admin positionne la valeur boolean.
    Ensuite, comme php a tendance dans son php.ini à ecrire "global: OFF", alors il faut que chaque page vérifie a chaque appel l'etat de cette variable.

    toutes tes pages WEB doivent alors commencer de la sorte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    require_once ("global.php");
     
    if($isOnline){
     
       "le contenu de ta page web"
    }
    esle{
      header("location: pageMaintenance.php?arg=unespecificite);
    }
    maintenant ton fichier pageMaintenance.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $pourquoi = $_GET['arg'];
     
    switch($pourquoi){
       case a:
           echo "parce que 1";
           break;
       case b:
           echo "parce que b";
           break;
    }

  10. #10
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Citation Envoyé par cosmo78 Voir le message
    Et bien si, on peut faire persister des donnees d'une requete a l'autre en passant par le tableau de session. Il n'y a pas un autre tableau qui lui serait partage par tous les utilisateurs?
    Mais ces données de sessions sont par défaut stoquées dans de simples fichiers textes que php re-ouvre et re-lit à chaque requête selon l'identifiant de session en cours. Ne pas faire persister le contexte de requête en requête est une des caractéristiques de php. Ca peut être vue comme un avantage ET un inconvénient.
    Les scripts php eux même ne persistent pas en mémoire d'une requête à l'autre. Le moteur php relit, parse, transforme et interprète chaque script encore et encore à chaque requête (il existe des solutions de cache d'opcodes mais ça ne garantit pas une persistance en mémoire de tout les instants).

  11. #11
    Membre habitué
    Homme Profil pro
    Tech Lead
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Tech Lead
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 169
    Points
    169
    Par défaut
    Alors je sais que j'arrive un peu après la bataille ^^ mais les résultats de tests que tu as donné m'aide à comprendre un truc alors je vais te donner une solution relativement simple à mettre en place à condition que tu te trouve sur un serveur Apache.
    Il suffit de faire en sorte que ton back office écrive un fichier .htaccess dans lequel tu met une règle de ré-écriture vers une page de maintenance. Comme ça ton code n'est pas pollué par ta vérification et surtout c'est Apache qui s'occupe de faire la redirection et non pas PHP du coup tes perf restent inchangées
    Je sais qu'il y a un équivalent dans IIS avec des filtres ISAPI mais je ne sais pas dans quelle mesure est ce que c'est faisable comme ça.
    Ensuite a toi de trouver la bonne règle de ré-écriture dans laquelle tu peux glisser une variable comme ca toi en tant que développeur tu as toujours accès au site et tu peux faire tes tests sur l'environnement de prod sans te faire emmerdé par les utilisateurs.

  12. #12
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Citation Envoyé par cosmo78 Voir le message
    Ce dont j'ai besoin, c'est encore au-dela des variables de session : la variable doit en effet etre partagee par toutes les sessions.

    Une idee?
    Mmmmh, tu cherches trop compliqué. Ce n'est pas une variable statique dont tu as besoin, c'est un fichier / table sql de configuration qu'il te faut

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 13
    Points : 0
    Points
    0
    Par défaut
    Je comprend tout à fait ce que tu cherchais l'année dernière, je commence php et j'en ai besoin. Je trouve incompréhensible que ça n'existe pas dans php.

    Donc pour résumer :

    1. _SESSION ne permet pas ce que tu veux faire puisqu'il n'est pas cross-session
    2. La base de données est une mauvaise idée, parce que si tu testes la variable que tu veux stocker genre
      if (mode == "debug"), à vraiment beaucoup d'endroits, alors :
      • soit tu fais un nombre vraiment pas optimisé de requête dans chaque fonction
      • soit t'es obligé de redéclarer quelque chose en haut de chaque page php (une variable globale ou faire un include qui lui fera la déclaration de la variable ..)

      ==> c'est laid, lourd et lent .. les 3 L.
    3. Stocker dans un fichier et le relire à chaque fois (même problème que la base de données, par contre c'est un peu plus rapide)



    Donc comment faire ?
    Multiplier la vitesse de l'acces disque par 1 000 000 ?
    Ben en fait oui c'est possible : Faire un ramdisk.
    Ca nécessite surement certain droits (mais étant développeur tu dois pouvoir les obtenir facilement)
    En plus c'est tout à fait dans la philosophie linux ... donc ça fera plaisir à certain. Et ça me fait plaisir parce que ça use pas le disque dur pour rien.

    # mkdir apache_ramdisk
    # mount -t ramfs none apache_ramdisk


    Et voila !

  14. #14
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Zero-c00l Voir le message
    [*]La base de données est une mauvaise idée, parce que si tu testes la variable que tu veux stocker genre
    if (mode == "debug"), à vraiment beaucoup d'endroits, alors :
    • soit tu fais un nombre vraiment pas optimisé de requête dans chaque fonction
    • soit t'es obligé de redéclarer quelque chose en haut de chaque page php (une variable globale ou faire un include qui lui fera la déclaration de la variable ..)

    ==> c'est laid, lourd et lent .. les 3 L.
    Peut-être est-ce parce que tu as une architecture 3L ...

    Dans une architecture avec un point d'entrée unique, MVC pour ne pas le nommer, un test à l'entrée sera suffisant...

Discussions similaires

  1. [PHP-JS] passage de variable de javascript à php
    Par msieurx dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2005, 20h42
  2. Réponses: 4
    Dernier message: 05/10/2005, 18h19
  3. Exportation de variable statique
    Par Laurent Gomila dans le forum C++
    Réponses: 16
    Dernier message: 31/08/2005, 16h32
  4. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55
  5. Types de variables entre mysql/php et flash
    Par ramses83 dans le forum Flash
    Réponses: 2
    Dernier message: 06/10/2003, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo