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 :

Problème au niveau du chemin d'Include [PHP 5.0]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut Problème au niveau du chemin d'Include
    Bonsoir chers membres !

    Je voudrais savoir comment régler ce problème:

    Situation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Site Web
       |index.php
       |System/
       |admin/
            |admin_const.php
            | styles.php
            | index.php
            | actions/
                  |add.php
                  |edit.php
    -------

    Le code cité sous appartient à la page Add.php ( un formulaire de validation)

    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
    if (!isset($_SESSION['admin']))
    	{
    //------------------
             }
    else
     
            {
    if (!isset($_POST['go']))
    		{
    		include ("../system/config.php");
    		include ('./styles.php');
     
                     //Afficher formulaire récupéré depuis une page tpl (Smarty).
     
                    }
    else
     
                    {
     
    if (isset($_POST['reciter_name']) and isset($_POST['pic']))
    			 {
     
    				include("../../system/config.php");
                                    include("../../admin/styles.php");
    				include("../../admin/functions.php");
                                    add_reciter($_POST['reciter_name'],$_POST['pic']);
    				echo 'ok';
     
                               }
     
                     }
    Je trouve le probleme précisement dans le include de Styles.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include("../../admin/styles.php");
    Ce fichier contient lui aussi un include dedans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    include_once("./admin_const.php");
    define("STYLE_SELECTED_ADMIN","default");
    require('../system/libs/Smarty.class.php');

    donc, lorsque je fais appel à styles.php cela entraîne aussi l'appel de admin_const.php qui ne se trouve absolument pas au même chemin.

    Comment puis-je remédier ce problème .

    merci d'avance

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Une solution ici serait d'exploiter le set_include_path() (et get_include_path) afin de définir un chemin que je qualifierais de "chemin clé", ce qui permettra de mettre des chemins relatifs simple au niveau des include/require.
    La doc pour : set_include_path()


    Faut cependant indiquer un chemin physique, genre : home/user/ProjetsWeb/www/admin/
    Ou en local sur Crosoft du genre : C:/wamp/www/admin/

    Ensuite, pour inclure par exemple add.php dans index.php ce trouvant dans admin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    include('actions/add.php');

    Pour la partie cliente, les Css, JS, etc ..., dans le même esprit une solution serait de rajouter un <base href="..." /> pour définir la base des chemins relatifs.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <!DOCTYPE ... etc ... >
    <html>
    <head>
        <title></title>
        <base href="http://www.domaine.com/admin/" />
        <link rel="stylesheet" type="text/css" href="styles.css" media="screen" />
    </head>
     
    <body>
        ... etc ...
        <img src="images/logo.jpg" />
    </body>
    </html>
    Tous les chemins relatifs se baseront selon le chemin (l'URL) indiquée dans le <base>.
    Le Css styles.css (l'URL) sera recherchée dans www/admin/styles.css.
    L'image logo.jpg sera recherchée dans www/admin/images/logo.jpg


    Une toute autre façon de procéder, c'est de créer (coté hébergeur) un sous domaine "admin", donc de dissocier la partie publique, (le site Web ouvert à tous) de la partie administration.
    Comme tout, entre autre l'index.php sera à la racine, les chemins devraient être plus simple à gérer.
    Faut voir si l'applicatif s'y prête, c'est pas dit.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    merci pour la réponse, c'est ce que je cherchais exactement !
    J'espere que son utilisation et comme ceci:

    Exemple de mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set_include_path('../../'. PATH_SEPARATOR .'../');
    include ('admin/admin_const.php');
    		include ('system/config.php');
    		include ('admin/styles.php');
    Ça marche impeccable mais, il y a petit souci ! cette fonction n'affecte pas Smarty.
    parce que j'ai des $smarty->display du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $smarty->display("./admin_styles/".STYLE_SELECTED_ADMIN."/error2.tpl");
    Ya t'il pas une fonction du genre set_include_path() pour Smarty?

  4. #4
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    Citation Envoyé par Medyo4zy Voir le message
    Ya t'il pas une fonction du genre set_include_path() pour Smarty?
    Je viens de réparer le problème !
    j'ai créé une variable $base_path qui reprend le lien actuel du fichier style comme ceci :

    Fichier Styles.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $base_path = dirname(__FILE__);
    ....
    $smarty->template_dir=$base_path."/admin_styles";
    $smarty->compile_dir=$base_path."/admin_compil";
    Une autre petite question si c'est possible !

    Ce code: Signifie quoi exactement !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_include_path('../../'. PATH_SEPARATOR .'../../admin/'. PATH_SEPARATOR .'../');
    Est que lorsqu'on fait un include, la recherche s'effectue sur ../../ , s'il l'on trouve pas, sur ../../admin sinon....

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Utilise des chemins physiques complets dans le set_include_path, comme dans les exemples précédant.
    Exploite ce que renvoie $base_path par exemple, ou alors quitte à le mettre "en dur".
    Dans certains cas (c'est le mien d'ailleurs), un chemin ne pourra pas être obtenu dynamiquement.
    Mais de ton coté, ça à l'air possible, faut donc en profiter.

    La plus simple cependant, c'est de commencer de mettre ce chemin "en dur" dans le set_include_path() pour d'abord savoir qu'est ce qu'il faut mettre, et comment réagit ton application, comment après exploiter les include.
    A savoir qu'il faudrait le faire au plus tôt possible, dans le index.php par exemple.

    Après tu sauras comment l'obtenir, soit par dirname(__FILE__), ou dirname(dirname(__FILE__)), ça dépend où ce situe le fichier.

    Mais il faudrait aussi reprendre les chemins définis à l'origine dans le include_path avec get_include_path(), sinon tu risque d'avoir des problèmes.
    Regarde au niveau de la doc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $path = '/home/user/repweb/www/';
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    Fait d'abord comme ci-dessus, fait simple d'abord.
    Dis toi que tu as aussi tout le loisir de stocker ce même chemin complet dans une variable ou constante, etc ... pour l'exploiter dans des cas particuliers.

    A savoir qu'il y a aussi une constante (dans Php) DIRECTORY_SEPARATOR qui sur Windows renvoi \ et sur Linux /.
    Mais bon, Windows accepte les 2 si je ne dis pas de bêtises.



    Petite parenthèse au passage.
    Réfléchi bien sur la manière donc tu structure ton site, car théoriquement (je dis bien théoriquement), le répertoire "actions" et tout ce qui s'y trouve n'a pas vraiment besoin d'être dans le virtualHost.
    Ces fichiers (add.php, etc ...) ne devraient pas pouvoir être atteints via une URLs, donc le fait qu'ils soient dans le virtualHost, c'est déjà un manque de sécurité (même s'il y a un deny all).
    Théoriquement toujours, rajouter un répertoire genre "application" au même niveau que "systeme" serait tout aussi bien (voir mieux) pour mettre tout ce qui concerne l'application en-dehors d'un répertoire qui ce veut publique.

    On peu même pousser le bouchon à l'extrême, c'est à dire n'avoir que l'index.php dans le virtualHost, et tout le reste en-dehors.
    M'enfin, c'est quand même l'extrême, car conserver ne serait-ce que les images, les feuilles de style Css, Javascript par exemple dans le virtualHost est peut être préférable.
    Mais pour ce qui est des tous les fichiers Php (ou autres) inclus, ils sont justement inclus, on ne les atteins pas via une URLs, ce qui fait toute la différence.
    Vois tu ?
    Bon, j'ai bien dis que c'était une parenthèse.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    J'ai du mal à utiliser cette fonction !
    dois-je utiliser cette fonction dans actions.php parce que c'est lui qui gère toutes les inclusions des fichiers (add.php , edit.php ) présents dans le dossier actions/ , ou bien dans autre ?

    si j'ai bien compris, je declare la fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //easyphp
    $path = 'C:/Program Files/EasyPHP-5.3.2i/www/Site1/';
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    //pour inclure
    include("admin/actions/add.php");
    lorsque je fais un echo de get_include_path(), ça renvoie
    .;C:\php5\pear;C:/Program Files/EasyPHP-5.3.2i/www/Site1/


    edit:ca sert à quoi ce get_include_path() et ce PATH_SEPARATOR ?

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

Discussions similaires

  1. Problème chemin avec include
    Par Zanarkand dans le forum Langage
    Réponses: 11
    Dernier message: 04/10/2012, 10h17
  2. Problème au niveau du chemin de fichier
    Par kobe24 dans le forum C#
    Réponses: 2
    Dernier message: 15/07/2009, 14h49
  3. [Eclipse CDT]problème au niveau des include
    Par snoop dans le forum Eclipse C & C++
    Réponses: 6
    Dernier message: 05/04/2009, 15h57
  4. [JTree] Problème d'ouverture de chemin dans un JTree
    Par antares24 dans le forum Composants
    Réponses: 2
    Dernier message: 11/03/2005, 09h18
  5. [DNS MX]Avec DynDNS.org, problème au niveau du MX
    Par Swoög dans le forum Développement
    Réponses: 9
    Dernier message: 24/08/2004, 23h00

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