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 :

Je ne comprends pas bien les variables d'envrionnement


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut Je ne comprends pas bien les variables d'envrionnement
    Bonjour,

    J'essaie d'utiliser les variables d'environnement, mais je crois que je n'ai pas bien compris comment cela fonctionne.

    J'ai cru qu'une fois que l'on définissait ces variables elles étaient définies au niveau du serveur PHP et non de la procédure elle même.

    Pour expliquer plus facilement j'ai créé ci-dessous un petit programme test.php. SI la variable TEST_EXCEL n'existe pas ou contient la valeur" free" je la remplace par "busy".
    Je pensais (bêtement sans doute) qu'à la prochaine exécution de ma procédure, je retrouverais la valeur "busy" mais pas du tout. La variable n'est plus définie.

    Dans php.ini j'ai aussi

    1) commenté la directive ; safe_mode_allowed_env_vars=PHP_
    2) utilisé cette directive avec safe_mode_allowed_env_vars=PHP_, TEST_
    mais sans succès.

    Merci de m'expliquer comment puis-je faire pour conserver une variable tant que le server PHP est actif.

    Gégé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
       $lock = getenv("TEST_EXCEL");
    if ($lock == false || $lock =="free" )
    {
    	echo "La variable existe peut-être, si oui, elle est égale à ".$lock;
    	$lock ="busy";
    	putenv("TEST_EXCEL=$lock");
    	echo "<br>La variable existe maintenant, elle est égale à ". getenv("TEST_EXCEL");
    	die();
    }
    else 
    {
    	 die("Il faut attendre que ce soit débloqué");
    }	
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Une variable d'environnement est une donnée relative au serveur, c'est tout.
    Si tu veux faire persister une variable, la première réponse c'est une session PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    Je ne comprends pas bien ce que tu entends par "relative au serveur" ? Pour moi j'avais compris serveur WEB (apache par exemple) De quel serveur parles-tu ? Sans doute n'ai je pas bien compris comment marche PHP.

    Comment puis-je faire pour avoir une variable qui est commune à tous les scripts en PHP et tous les utilisateurs invoquant ces scripts ?

    Quoi qu'il en soi merci pour cette première réponse.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Regarde le contenu de la variable, tu comprendras mieux.

    Quel genre de données veux-tu partager ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Les variables d'environnement, comme l'a dit sabotage, sont des variables liées au serveur ou à l'utilisateur courant qui ne peuvent pas être modifié, et tu ne peux en créer de nouvelles (ce sont par exemple la version du serveur installé, ou le navigateur utilisé par l'utilisateur courant).

    Comment puis-je faire pour avoir une variable qui est commune à tous les scripts en PHP et tous les utilisateurs invoquant ces scripts ?
    Si ça concerne tous les utilisateurs, il faut que tu la stocke dans une base de données. Pour un seul utilisateur et pour une donnée qui n'a pas lieu d'être sauvegardé après la fin de la session (= fermeture du navigateur), tu peux utiliser les variables de sessions.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    OK j'ai compris, c'est le mot serveur qui faisait confusion. Car pour moi "au niveau serveur" signifiait une variable globale pour tout le monde.
    En fait, je cherche un système de verrouillage sur un fichier EXCEL. Via le biais de PHPExcel (excellent outil), mes utilisateurs peuvent ajouter ou modifier des lignes.

    IL faut donc que pendant un très court instant (juste le temps entre lecture éventuelle et écriture) je bloque les autres mises a jour potentielles avec une boucle d'attente. C'est vrai que vu la fréquence et le nombre d’utilisateurs (moins de 8) la probabilité d'accès en écriture sur ce fichier est voisin de zéro, mais elle existe toutefois et je ne peux me permettre de de pas mettre en jeu un système pour assurer l'intégrité.

    Quelqu'un aurait-il une solution ? Je cherche un système du type Wait/Wakeup ou Enqueue/dequeue. J'ai également pensé à utiliser un fichier auxiliaire ou une base de données MySQL mais cela ne me plait qu'à moitié.

    Merci encore de l'intéret que vous portez à mon problème

    Gégé

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    Si j'ai bien compris il n'y a pas de solution sans passer par une base de données (qui gère le contrôle exclusif). C'est ce que je voulais éviter car installer par exemple MySQL juste pour mettre à jour un fichier me parait être comme utiliser un marteau-pilon pour enfoncer un clou.

    J'ai une autre idée mais je ne suis pas certain que celui puisse marcher. D'où je demande votre avis.

    Supposons qu j'utilise un fichier auxiliaire qui me sert de fichier de contrôle d'accès avec la commande flock sur ce fichier avant d'accéder aux ressources partagées. Est-ce que ceci pourrait marcher ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Points : 149
    Points
    149
    Par défaut
    J'ai effectivement fait des essais en utilisant flock et ça fonctionne parfaitement. Cela m'évite d'installer MySQL ou SQLite.

    Si d'autres ont le problème voici le scénario :

    1)Définir un fichier bidon "lock.cntrl" qui sert simplement d'entrée pour le code et les ressources qui doivent être protégés en multi-accès.

    2) Après l'ouverture de ce fichier faire "flock" sur ce fichier . Ainsi tout autre demande d'accès attendra le déverrouillage de ce fichier.

    Note importante :
    Bien sûr si une autre procédure PHP ne respecte pas ce code (ne lance pas de flock), elle pourra avoir accès au fichier. Mais dans le cas qui me préoccupait, il s'agit d'un projet universitaire avec peu d'utilisateurs et je suis le seul à gérer les procédures PHP s’exécutant sur ce serveur local non accessible (en principe) de l'extérieur. Donc le risque est très faible bien que non nul évidemment.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php
    set_time_limit(100);   // juste pour les tests
     
    $handle = fopen("lock.cntrl", "a") Or die ("Fichier déjà ouvert par un autre thread ou process");
    flock($handle, LOCK_EX);  // on réalise un contrôle exclusif 
    fwrite($handle, "Verrouillé à :".date("h:i:s")."\n");
      //   ......... 
      //   .......
      // on se met en attente 5 secondes 
      // juste assez de temps  pour simuler l'exécution du  code 
      // et tester le verrouillage
        sleep(5);   
      //  ......... 
      //   .......
    flock($handle, LOCK_UN); // déverrouilage
    fwrite($handle, "Déverrouillé à :".date("h:i:s")."\n");
    fclose($handle);
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une chose que je ne comprend pas avec les editors/renderer
    Par Djobird dans le forum Composants
    Réponses: 6
    Dernier message: 30/03/2009, 10h24
  2. Ne pas déclarer les variables
    Par Loki83 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 14/11/2008, 15h27
  3. ne pas conserver les variables $_POST en mémoire
    Par juju03 dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2008, 09h44
  4. Réponses: 6
    Dernier message: 31/08/2007, 21h05
  5. [Sécurité] Ne pas afficher les variables de l'URL
    Par Wormus dans le forum Langage
    Réponses: 17
    Dernier message: 23/10/2005, 14h13

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