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

PHP & Base de données Discussion :

Sessions PHPBB - Erreur fonction append_sid() [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre chevronné Avatar de mangasource
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 122
    Par défaut Sessions PHPBB - Erreur fonction append_sid()
    Bonjour,

    Je vous présente mon problème.

    Grâce à PHPBB, j'ai créer un script me permettant de me connecter directement a partir de mon site. ( PHPBB mettant a disposition les documents pour réaliser se script : http://forums.phpbb-fr.com/documenta...jet154874.html ).

    Sur chacune des pages de mon site web j'inclus deux fichiers.

    Avant le doctype j'inclus espace_membre_forum.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
        <?php
        define('IN_PHPBB', true);
        $phpbb_root_path = './forum/';
        $phpEx = substr(strrchr(__FILE__, '.'), 1);
        include($phpbb_root_path . 'common.' . $phpEx);
        $user->session_begin();
        $auth->acl($user->data);
        $user->setup();
        if (isset($_GET['logout']))
        {
           $user->session_kill();
           $user->session_begin();
        }
        if (isset($_POST['login']))
        {
           $username = request_var('username', '', true);
           $password    = request_var('password', '', true);
           $autologin   = (!empty($_POST['autologin'])) ? true : false;
           $viewonline = (!empty($_POST['viewonline'])) ? 0 : 1;
           $admin = 0;
           $result = $auth->login($username, $password, $autologin, $viewonline, $admin);
           if ($result['status'] != LOGIN_SUCCESS)
           {
              $err = $user->lang[$result['error_msg']];
              if ($result['error_msg'] == 'LOGIN_ERROR_USERNAME' || $result['error_msg'] == 'LOGIN_ERROR_PASSWORD')
              {
                 $err = (!$config['board_contact']) ? sprintf($user->lang[$result['error_msg']], '', '') : sprintf($user->lang[$result['error_msg']], '<a href="mailto:' . htmlspecialchars($config['board_contact']) . '">', '</a>');
              }
           }
           else
           {
              $auth->acl($user->data);
           }
        }
        ?>
    Puis un fichier header.php qui mets le formulaire de connexion par dessus la bannière :

    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
        <div id="header">
        <div id="header_connexion">
        <?php
        if ($user->data['user_id'] != ANONYMOUS)
        {
           echo 'Bienvenue ' . $user->data['username'] . '<br />';
           echo '-----<br /><a href="' . append_sid('http://fanmetalalchemist.free.fr/index.php?logout=true') . '">Déconnexion</a>';
        }
        else
        {
        if($err)
           {
              echo "<h5>$err</h5>";
           }
        ?>
        <form method="post">   
        Pseudo:<br />
        <input type="text" tabindex="1" name="username" size="25" /><br />
        Mot de passe:<br />
        <input type="password" tabindex="2" name="password" size="25" /><br />
        <input type="submit" name="login" tabindex="5" value="Connexion" />
        </form>
        <?php
        }
        ?>
        </div>
        </div>
    La fonctipn append_sid, est dans le fichier functions.php.
    Ce fichier est inclus dans common.php, lui même inclus dans header.php, qui, est lui même inclus dans chacune de mes pages ( Comme dit ci-dessus ).

    Voici un exemple d'une page de mon site web :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        <?php include("./includes/espace_membre_forum.php"); ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <?php include("./includes/head.php"); ?>
        <body>
        <?php include("./includes/header.php"); ?>
        <?php include("./includes/menu.php"); ?>
        <div id="corps">
        Article bla bla bla
        </div>
        <?php include("./includes/footer.php"); ?>
        </body>
        </html>
    Problème :
    Lorsque je suis connecté, et que je change de page ( Ex: de index.php à staff.php, situés tous deux au même niveau ), ce message d'erreur apparait :

    Fatal error: Call to undefined function append_sid() in /mnt/132/sdb/6/e/fanmetalalchemist/includes/header.php on line 7
    Et cela même si je ne suis pas connecté.

    Auriez-vous une réponse?

    Merci.
    > Mes groupes :
    Amateurs de mangas/animes | Joueurs/Joueuses du TCG Magic : The Gathering | Les SIMPSONS / FUTURAMA
    > Vous avez la réponse à votre question ? Mettez votre sujet en Résolu

  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

    Je ne connais absolument pas PhpBB, je me tiens au message d'erreur, et tes explications.

    L'erreur a lieu à la ligne 7 du header.php, et tu dis que cette fonction append_sid() est incluse (indirectement) dans le header.

    Donc question : Est-ce que ça se fait avant la ligne 7 ?
    Théoriquement non selon tes explication, donc si ça se fait après, c'est normal qu'il y a erreur.
    A vérifier.

  3. #3
    Membre chevronné Avatar de mangasource
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 122
    Par défaut
    Non, elle est inclus en tout début de page, avant le doctype.
    Donc non.
    > Mes groupes :
    Amateurs de mangas/animes | Joueurs/Joueuses du TCG Magic : The Gathering | Les SIMPSONS / FUTURAMA
    > Vous avez la réponse à votre question ? Mettez votre sujet en Résolu

  4. #4
    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
    Non, elle est inclus en tout début de page, avant le doctype.
    Donc non.
    Disons que le Doctype importe peu, voir complètement, ce n'est pas le problème.

    Puis tu disais :
    La fonctipn append_sid, est dans le fichier functions.php.
    Ce fichier est inclus dans common.php, lui même inclus dans header.php, qui, est lui même inclus dans chacune de mes pages ( Comme dit ci-dessus ).
    Donc comme le header.php est inclus après le doctype d'après le code, du coup tu tes explications sont un peu contradictoires.
    Mais peu importe en faite.
    Ceci dit, je ne vois pas d'include de common.php dans le header.php ?


    L'erreur à lieu à la ligne 7 dans le header.php, et à ce moment cette fonction append_sid() est inconnue, c'est ce que dis le message d'erreur.
    Par conséquent, cette fonction n'est pas incluse (le fichier qui la contient), il n'y pas de mystère à mon sens.

    A part te dire de revoir un peu ces inclusions en cascades, et qui sait, peut être en sortir un (le common.php peut être) pour le mettre directement dans le header.php et avant cette ligne 7, je ne vois pas autre chose, et ça peu être une solution.
    Ou essayer, ne serait ce que pour voir.


    Sinon, as tu prospecter du coté de PhpBB, c'est eux qui à mon sens pourraient t'aider la dessus, non ?

  5. #5
    Membre chevronné Avatar de mangasource
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 122
    Par défaut
    Il n'est pas inclus dans header.php mais dans le fichier inclus avant le doctype, par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    include($phpbb_root_path . 'common.' . $phpEx);
    Et peut importe ce que ja fais cela ne marche pas. Pourtant la fonction est bien inclue. Normalement en tout ca, après mainte vérification, je ne vois pas pourquoi elle ne le serait pas.

    Oui j'ai demandé aide, mais pas plus.
    > Mes groupes :
    Amateurs de mangas/animes | Joueurs/Joueuses du TCG Magic : The Gathering | Les SIMPSONS / FUTURAMA
    > Vous avez la réponse à votre question ? Mettez votre sujet en Résolu

  6. #6
    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
    Et peut importe ce que ja fais cela ne marche pas. Pourtant la fonction est bien inclue. Normalement en tout ca, après mainte vérification, je ne vois pas pourquoi elle ne le serait pas.
    Elle n'est pas incluse, même si tu constate que le include y est, sinon il n'y aurait pas cette erreur.

    Peut être que le include du common est effectué selon une condition, ou alors sur celui du functions.php ?
    Va savoir.
    D'ailleurs, tu ne dis rien sur le include du functions.php, pourtant et d'après tes explications, c'est dans celui ci que se trouve cette fonction.
    Faudrait repérer le code de son include(), ça peu mettre sur la piste.

    As tu regardé le code dans ce common.php ?
    Il y a peut être des truc particuliers, non ?
    As tu essayé d'initialiser une variable dedans, et l'appeler dans ta page pour vérifier que ce common.php est bien inclus ? (il serait bon d'en être certain)

    D'ailleurs, en procédant ainsi, il devrait avoir moyen de pister les choses, en gros, qu'est ce qui est inclus ou pas.
    En somme, faut d'abord comprendre le pourquoi avant de trouver une solution.

  7. #7
    Membre chevronné Avatar de mangasource
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 122
    Par défaut
    Hum functions.php est inclus dans common.php oui, via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    require($phpbb_root_path . 'includes/functions.' . $phpEx);
    As tu essayé d'initialiser une variable dedans, et l'appeler dans ta page pour vérifier que ce common.php est bien inclus ? (il serait bon d'en être certain)

    D'ailleurs, en procédant ainsi, il devrait avoir moyen de pister les choses, en gros, qu'est ce qui est inclus ou pas.
    En somme, faut d'abord comprendre le pourquoi avant de trouver une solution.
    J'ai des connaissances en PHP limitées. Tu pourrais me guider ou m'en dire un peu plus?
    > Mes groupes :
    Amateurs de mangas/animes | Joueurs/Joueuses du TCG Magic : The Gathering | Les SIMPSONS / FUTURAMA
    > Vous avez la réponse à votre question ? Mettez votre sujet en Résolu

  8. #8
    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
    Hum functions.php est inclus dans common.php oui, via :
    oK.
    Mais ça c'est le code qui devrait l'inclure, mais il n'est peut être pas exécuté, car il peu se faire selon une ou autre condition.
    C'est ça qu'il faudrait repérer surtout.


    J'ai des connaissances en PHP limitées. Tu pourrais me guider ou m'en dire un peu plus?
    Ca va être sacrément compliqué de t'expliquer une telle démarche, d'autant que ça repose beaucoup sur du feeling (et ses connaissances).


    Mais avant, essai de faire un echo sur les valeurs de $phpbb_root_path et de $phpEx, voir même de mettre toit même (provisoirement) le chemin du fichier "en dur".



    En essayant de faire court.
    Il faudrait rajouter une fonction, dès le 1ère ligne dans le common.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function debugInc() { return 'Ok : '.__FILE__.'<br />' ; }
    Cette fonction affichera Ok: common.php (lenom du fichier) à son appel.

    Ensuite, appeller cette fonction dans ta page.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <body>
    <?php
    echo debugInc();
     
    include("./includes/header.php");
    ?>
    Si le common.php est inclus, alors ça affichera le texte comme prévu, sinon, une erreur Fatal sera provoquée.

    Ensuite, déplacer (couper/coller) la fonction dans le common.php, la mettre dans le functions.php, dès la 1ère ligne.
    Réafficher la page, et constater si le texte s'affiche ou pas.
    Théoriquement, rien ne devrait s'afficher, donc erreur Fatal, ça confirmerait que ce fichier functions.php n'est pas inclus.


    1/ Le functions.php pas inclus.
    On remet la fonction (couper/coller) dans le common.php, juste avant la ligne qui inclus le functions.php.
    Là encore rien ne s'affiche.
    Et bien il suffit de déplacer ligne par ligne en remontant vers le haut (ou déplacer de plusieurs lignes si on est certain que les codes n'en seraient pas en cause).
    Le but, c'est d'arriver qu'à une ligne rien ne s'affiche, et que 2 lignes plus haut, le texte s'affiche, donc cette fois le code est exécuté.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function debugInc() { return 'Ok : '.__FILE__.'<br />' ; }
    if (condition) {
    ... du code etc ...
    require($phpbb_root_path . 'includes/functions.' . $phpEx);
    }
    Ici, ça affichera le texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (condition) {
    ... du code etc ...
    function debugInc() { return 'Ok : '.__FILE__.'<br />' ; }
    require($phpbb_root_path . 'includes/functions.' . $phpEx);
    }
    Ici, une erreur Fatal aura lieu car la fonction ne sera pas créé à cause de la condition est FALSE.
    Donc tant qu'on a cette erreur fatal, on n'est pas parvenu à la condition qui devrait l'inclure. (enfin, en supposant).


    Je ne sais pas si tu vois le truc, l'astuce, le but de cette approche, qui peu d'ailleurs s'apparenter à un étau, un étau qu'on resserre, dont le but est de repérer la petite partie de code, voir la ligne exacte qui serait la cause de l'erreur (après,faut analyser ce code, et tenter d'avoir l'explication, une solution).
    Ceci ne pourra pas garantir à 100% de trouver l'erreur.


    En espérant que ceci te permette de l'exploiter au mieux.
    Sinon, je ne vois pas d'autre manière de procéder, car j'imagine que PhpBB est un peu "usine à gaz".

  9. #9
    Membre chevronné Avatar de mangasource
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 122
    Par défaut
    Mais avant, essai de faire un echo sur les valeurs de $phpbb_root_path et de $phpEx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $phpbb_root_path . '<br />';
    echo $phpEx;
    donne :

    ./forum/
    php
    ----------------------------------------------------

    Si le common.php est inclus, alors ça affichera le texte comme prévu, sinon, une erreur Fatal sera provoquée.
    Voilà ce que ca donne sur index.php

    ----------------------------------------------------

    Ensuite, déplacer (couper/coller) la fonction dans le common.php, la mettre dans le functions.php, dès la 1ère ligne.
    Réafficher la page, et constater si le texte s'affiche ou pas.
    Voilà ce que ca donne sur index.php

    Ok : /mnt/132/sdb/6/e/fanmetalalchemist/forum/includes/functions.php
    ----------------------------------------------------

    Aucun Fatal Error ...
    Je vois vraiment pas :/

    Ouais PHPBB c'est un peu l'anarchie quand on veut bidouiller ...
    > Mes groupes :
    Amateurs de mangas/animes | Joueurs/Joueuses du TCG Magic : The Gathering | Les SIMPSONS / FUTURAMA
    > Vous avez la réponse à votre question ? Mettez votre sujet en Résolu

  10. #10
    Membre chevronné Avatar de mangasource
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 122
    Par défaut
    Problème résolu.

    Je me suis emmêlé les pinceaux dans mes includes ( oublis, chemins d'accès, etc ...).

    En tout cas merci pour tout!
    Ton aide m'a été précieuse!

    Cordialement, mangasource
    > Mes groupes :
    Amateurs de mangas/animes | Joueurs/Joueuses du TCG Magic : The Gathering | Les SIMPSONS / FUTURAMA
    > Vous avez la réponse à votre question ? Mettez votre sujet en Résolu

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/06/2006, 15h54
  2. [DOM XML] Erreur fonction load() d'un objet dom??
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 12h43
  3. [Sessions] Message erreur PHP création de session
    Par Ylias dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2005, 12h11
  4. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 13h42

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