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 :

[Sécurité] Require global


Sujet :

Langage PHP

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 77
    Points : 463
    Points
    463
    Par défaut [Sécurité] Require global
    Bonjour,

    J'ai un petit problème avec mon code PHP.
    Voilà ma classe :
    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
    class Site {
     
    	private $id_site;
     
    	function __construct($id) {
    		$this->id_site = $id;
    		$this->loadConfig();		
    	}
     
    	private function loadConfig() {
    		$url_config = "config/config" . $this->id_site . ".php5";
    		require($url_config);
    	}
     
    	public function getPrimarySource() {
    		return $primary_source;
    	}
     
    }
    Que j'instancie comme cela : $site = new Site(1);.
    $url_config contient donc config/config1.php5.
    Le problème est que les variables contenus dans ce fichier ne sont accessibles que dans la fonction loadConfig().
    $primary_source (présent dans le fichier config1.php5) n'est donc pas initialisé.

    J'ai essaié en déplacant le require() dans le constructeur mais cela ne marche pas.
    Comment faire pour que mon require soit valable dans toute la classe ?
    Je ne peux pas le placer en dehors de celle ci, car j'ai besoin de la valeur donnée à l'instanciation de la classe.

    Merci d'avance pour vos réponses.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut
    je suppose que ton fichier de config comptient un certain nombre de variable
    tu peut faire une methode qui va parser ton fichier config.php et metre tes variable dans un attribut de type array
    tu peut aussi delegué cette action a une autre class ce qui est plus propre

    quel est la structure de ton fichier?(.ini,xml,txt,autre);
    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
    class Site {
     
       private $id_site;
    private $config=array();
     
       function __construct($id) {
          $this->id_site = $id;
          $this->loadConfig();      
       }
     
       private function loadConfig() {
          $this->config=fonction ou objet qui parse le fichier de config
       }
     
       public function getPrimarySource() {
          return $primary_source;
       }

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 77
    Points : 463
    Points
    463
    Par défaut
    Merci pour ta réponse.
    En faite pour le moment, je fais des copies des variables contenues dans le fichier vers des attributs de la classe.

    Mon fichier de config est un petit script PHP qui ne contient que des variables et des tableaux (array).
    Perso (à moins de recourir à diverses expressions régulières), je ne vois pas trop comment automatiser tout ça (parser le fichier de config et mettre le tout dans un tableau)..

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    tu peut passer par un fichier ini et te servir des fonctions specifique de php
    ou passer par un fichier xml

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    salut,
    un ti exemple :

    XmlFile.class.php
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <?
    /**
    * Classe XmlFile
    *
    * Permet d'encapsuler simplexml
    * @author siddh
    * @version 1.0
    */
    class XmlFile 
    {
    	private $filename;
    	private $xml;
     
    	function __construct($filename)
    	{
    		$this->filename = $filename;
    		$xml = simplexml_load_file($this->filename);
    		$this->xml	= $xml;
    	}
     
    	function get($prop)
    	{
    		$tab = $this->xml->xpath("//".$prop);
    		return trim(utf8_decode($tab[0]));		
    	}
     
    	function getAsXml($prop)
    	{
    		eval('$tab = $this->xml->'.$prop.'[0];');
    		return $tab->asXml();		
    	}
     
    	function set($prop,$value)
    	{
    		$value = $value == "" ? "\"\"" : utf8_encode($value);
    		eval("\$this->xml->$prop=$value;");
    	}
     
    	function getAll($prop)
    	{
    		$tab = $xml->xpath("//".$prop);
    		return $tab;		
    	}
     
    	function xpath($prop)
    	{
    		$tab = $xml->xpath($prop);
    		return $tab;		
    	}
     
    	public function getXml()
    	{
    		return $this->xml;
    	}
     
    	function save()
    	{
    		file_put_contents($this->filename,$this->xml->asXML());
    		$this->reload();
    	}
     
    	function reload()
    	{
    		$xml 		= simplexml_load_file($this->filename);
    		$this->xml	= $xml;
    	}
    }
    ?>
    xml.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?
    	include("XmlFile.class.php");
     
    	$xml = new XmlFile("params.xml");
    	echo "mon param = ",$xml->get("monParam"),"<br />";
    	$nouv = $xml->get("monParam") == "titi" ? "toto" : "titi";
    	echo "Modification en '$nouv' <br />";
    	$xml->set("monParam",$nouv);
    	$xml->save();
     
    	echo "<a href='#' onclick='document.location.reload(true)'>Rejouer</a>";	
    ?>
    params.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <params>
    	<monParam>toto</monParam>
    </params>
    Bon apres tu peux mettre aussi les fonctions magiques __get et __set

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 77
    Points : 463
    Points
    463
    Par défaut
    Merci pour vos réponses, cependant si j'ai choisis pour cette partie là un fichier PHP plutôt que de l'XML ou un format maison, c'est parce que je dois stocker des données importantes ("mots de passe de bases de données, ftp etc..).

    Je sais qu'il y a des solutions comme les HTACCES mais bon...

  7. #7
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    c est toi qui voit
    penses au stp

  8. #8
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    l'avantage et l'inconvénient d'un format de fichier de config en php est qu'il peu contenir des instructions complexes et as seulement des définitions.

    c'est un avantage car cela permet une grande souplesse dans la config.
    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define ('WEBDIR', dirname(dirname(__FILE__))."/www");
    qui défini WEBDIR comme étant le chemin absolu vers le dossier www frère de celui contenant le fichier de config.

    mais cela est aussi un inconvénient car on ne sais pas ce qui peu être interprété à ce moment là si le code est utilisé par kk1 d'autre.

    pour ma part j'utilise des fichiers XML plus exactement des fichiers PLIST
    PLIST est un format XML dédié à la définition de couple CLEF VALEUR
    la DTD est très courte http://www.apple.com/DTDs/PropertyList-1.0.dtd
    Une PLIST est un dictionnaire qui contient une succession de tag key type ou type est un type de valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
     <dict>
             <key>ArchiveName</key>
             <string>nom_du_média</string>
             <key>ArchivePath</key>
             <string>./nom_du_dossier_photothèque</string>
     </dict>
     </plist>
    comme vous pouvez le voir apple en fait un usage intencif.

    cela est très proche des fichier property de java mais les valeurs sont typées. array | data | date | dict | real | integer | string
    de plus une clef peut être elle même un dictionnaire (dict)
    on retrouve alors les [section] des fichier ini de windows.

    enfin pour tout c qui est config je part d'un principe qui pour moi est un invariant.
    Un élément de configuration est constant durant toute la durée de vie du programme
    sinon ce n'est pas un élément de configuration.

    donc mon parseur transforme les key du fichier de config en constantes.
    même lorsque j'utilisais des fichier de config en php je ne dérogeais jamais de ce postula

    une constante ne pouvant être définie qu'une fois e problème est la gestion des valeur par défaut.

    par exemple on à l'habitude de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $database = "mybase";
    include_once "config.php";
    dans le quel $database peu ne pas être définie

    avec des constante ceci ne marche plus
    il suffit d'inverser la vapeur pour retrouver ce fonctionnement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include_once "config.php";
    @define ("DATABASE", "mybase");
    A+JYT

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 30
    Points
    30
    Par défaut
    Ah tiens justement je me posais une question de la sorte.

    Imaginons que j'ai tout plein de variables à initialiser dont je vais me servir ensuite dans un script.
    Qu'est-ce qui est le mieux ? De mettre toutes ces variables dans un fichier conf.php ou truc du genre ? Ou de mettre tout ça en XML ?
    L'avantage peut-être du XML, c'est que pour qui quelqu'un ne connait pas le php, modifier une ptite variable c'est plus facile avec du XML et encore, j'en suis même pas sûr...
    Modifier:
    $nombre_max_users = 8
    est-il bien plus dur que modifier:
    <nombre_max_users>8</nombre_max_users> ?
    Mais bon, c'est peut-être plus "propre" en XML ?

    De plus, les deux méthodes sont-elles aussi performantes ? Lire et interpréter un fichier XML ne demande-t-il pas plus de ressources que d'inclure un fichier php ?

    Donc quelle méthode est la meilleure selon vous ?
    Merci d'avance pour vos éclaircissements !

  10. #10
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut Re: [PHP]Require global
    Fichier config1.php

    <?php
    $config1
    = array(
    'mavar1' => 'mavalue1',
    'mavar2' => 'mavalue2',
    'mavar3' => 'mavalue3'
    );
    ?>
    dans la class... .. .

    <?php
    private
    function loadConfig()
    {
    $configFile = 'config/config'.$this->id_site.'.php';
    if(
    file_exists($configFile)){
    require_once(
    $configFile);
    $VarDatas = 'config'.$this->id_site;
    if(!isset($
    $VarDatas) || empty($$VarDatas)){
    return
    false;
    } else {
    $this->Conf[$this->id_site] = $$VarDatas;
    return
    true;
    }
    } else {
    return
    false;
    }
    }
    ?>
    Quand config1.php est chargé...

    <?php
    $this
    ->Conf = array(
    [
    1] => array(
    'mavar1' => 'mavalue1',
    'mavar2' => 'mavalue2',
    'mavar3' => 'mavalue3'
    )
    );
    ?>
    Pour récupérer la valeur correspondante à l'id... .. .
    <?php
    private
    function getConfig($id)
    {
    if(!isset(
    $this->Conf[$id]) || empty($this->Conf[$id])){
    return
    false;
    } else {
    return
    $this->Conf[$id];
    }
    }
    ?>
    C'est aussi simple que ça... .. .

    @ tchaOo°

  11. #11
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    mwé, je préfère la solution xml et htaccess

  12. #12
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par siddh
    mwé, je préfère la solution xml et htaccess
    XML/htaccess ou PHP/htaccess c'est un peu du pareil au même... y a INI/htaccess aussi... .. .

    @ tchaOo°

  13. #13
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    et txt/htaccess on peut ?

  14. #14
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par siddh
    et txt/htaccess on peut ?


    @ tchaOo°

  15. #15
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    l'avantage du xml est qu'il peut être écrit et interprété par divers outils
    il n'est pas compliqué de faire un petit prefpane (je ne sais pas comment ça s'appelle sous windows (paramètre je crois)

    les éditeur de xml pour assister le rédacteur existent
    et faire un petit bout de php pour faire une interface pour aider à la conf n'est pas compliqué.

    A+JYT

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 30
    Points
    30
    Par défaut
    Oki, merci ! Donc je pencherai ptete aussi plutôt vers des fichiers XML.

    Et pour cette question ?
    De plus, les deux méthodes sont-elles aussi performantes ? Lire et interpréter un fichier XML ne demande-t-il pas plus de ressources/temps que d'inclure un fichier php ?
    Merci !

  17. #17
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Tout depend de ce que fais le fichier inclus

    L'utilisation de simple_xml ne prend pas trop de ressources si ton fichier ne fais pas des Mo.

    Pour les gros fichiers xml, il vaut mieux passer par un parser de type SAX.

  18. #18
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 30
    Points
    30
    Par défaut
    Oki, merci pour ces éclaircissements

    A+

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

Discussions similaires

  1. Une erreur 233 de ms sql server
    Par Hokage dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/10/2009, 17h40
  2. Erreur 233 sous sql server
    Par brajae85 dans le forum Oracle
    Réponses: 3
    Dernier message: 18/05/2009, 16h12
  3. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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