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

Symfony PHP Discussion :

include dans un contrôleur


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut include dans un contrôleur
    Bonjour,

    Je souhaite partager dans mon application Symfony2 les sessions du forum phpBB. J'ai dans mon dossier web un dossier nommé "forum", jusque là tout fonctionne bien lorsque je tape /forum/index.php j'arrive bien sur mon forum.

    Je me suis basé sur ce tuto pour partager les sessions :
    https://www.phpbb.com/support/docs/e...s-integration/

    J'ai donc inclus ce code dans un contrôleur :
    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
     
    public function indexAction()
        {
            define('IN_PHPBB', true);
            define('ROOT_PATH', "./forum");
     
            if (!defined('IN_PHPBB') || !defined('ROOT_PATH')) {
                exit();
            }
     
            $phpEx = "php";
            $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : ROOT_PATH . '/';
            include($phpbb_root_path . 'common.' . $phpEx);
     
            $user->session_begin();
            $auth->acl($user->data);
            echo "<pre>";
            print_r($user);
            echo "</pre>";
            exit;
    }
    Et ça ne fonctionne pas j'ai juste une page blanche :/ Par contre si je crée un fichier test.php dans lequel je met exactement le même code et que je le place à l'intérieur du dossier web là ça fonctionne très bien, je vois pas trop d'où ça pourrait venir et suis un peu perdu là ^^'

    Si quelqu'un aurait une idée je suis preneur =)

    Merci d'avance

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Solution pas clean mais qui risque de marcher: mets le code dans app.php

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Il y a quelque chose de bizarre :

    Quand je met ce code dans app.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
     
    define('IN_PHPBB', true);
    define('ROOT_PATH', "./forum");
     
    if (!defined('IN_PHPBB') || !defined('ROOT_PATH')) {
        exit();
    }
     
    $phpEx = "php";
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : ROOT_PATH . '/';
    include($phpbb_root_path . 'common.' . $phpEx);
    $user->session_begin();
    $auth->acl($user->data);
    echo "<pre>";
    print_r($user);
    echo "</pre>";

    ça fonctionne, il arrive à m'afficher mon $user connecté sur phpBB. Par contre il ne semble plus rentrer dans mon controller, j'ai fais un echo dedans suivi d'un exit et il ne se fait pas (aucune erreur il semble juste pas rentrer dedans).

    J'ai donc commencé à débugger, j'ai enlevé une à une en partant du bas les lignes jusqu'à l'affichage du echo de mon controller. Il semblerait que ça soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    include($phpbb_root_path . 'common.' . $phpEx);
    qui pose problème, dès que je le fais, le contenu de mon controller est ignoré.



    Je suis ensuite passé dans le app_dev.php pour pouvoir voir les erreurs et là je vois ça qui bloque (c'est phpBB qui génère l'erreur) :
    http://image.noelshack.com/fichiers/...a-22-37-03.png

    Voici la ligne correspondante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
    C'est ce qui restreint l'accès au app_dev.php uniquement en local, je doute que le problème vient de là étant donné que ce code n'est présent qu'en dev :/


    Une fois ce code commenté j'ai exactement la même chose que dans app.php, uniquement l'affichage de mon $user, et mon echo de mon controller est ignoré

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Là on entre dans les entrailles de phpBB et je n'y connais absolument rien donc je ne pourrais sans doute pas aider pour la suite (s'il y a d'autres problèmes venant de phpBB). J'ai cependant regardé leur code sur Github et j'ai vu ceci:

    https://github.com/phpbb/phpbb/blob/...quest.php#L100

    phpBB semble avoir choisi la méthode dure pour forcer ses développeurs à filtrer et valider les inputs, en désactivant purement et simplement les superglobales ($_POST, $_GET, $_SERVER...). C'est une philosophie... particulière, mais qui du coup affecte Symfony.

    La solution se trouve quelques lignes plus bas, en utilisant cette méthode pour réactiver les superglobales: https://github.com/phpbb/phpbb/blob/...quest.php#L118

    Tu dois donc utiliser l'objet global (quelle ironie!) $request défini dans compatibility_globals.php, lui-même inclus dans common.php.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request->enable_super_globals();

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Yep, ça a en effet résolu le problème de la variable $_SERVER (le screen que j'avais mis dans mon précédent post). Par contre il ne m'affiche toujours pas le echo de mon controller

    En fait j'ai l'impression que pour une raison obscure, à cause de l'inclusion du fichier de phpBB il ne rentre plus dans mon contrôleur... C'est bête j'y suis presque, si j'arrive à faire ça j'ai accès à la session de l'utilisateur phpBB et je pourrais enfin commencer à développer mon site

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Où exactement dans app.php (ou mieux, essaie avec app_dev.php) as-tu ajouté ce code?

    N'affiche rien dans app.php, contentes-toi d'ajouter le code pour voir?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    J'ai mis le code au tout début du fichier, j'ai aussi essayé de ne rien afficher dans app.php mais ça ne change rien :/

    Je suis passé dans app_dev.php, j'ai essayé de placer le code de partage de session phpBB un peu partout, et c'est à partir du moment où je l'ai placé à cette endroit que je vois à nouveau le echo de mon controller :
    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
     
    $loader = require_once __DIR__.'/../app/bootstrap.php.cache';
    Debug::enable();
     
    require_once __DIR__.'/../app/AppKernel.php';
     
    $kernel = new AppKernel('dev', true);
     
    $kernel->loadClassCache();
    $request = Request::createFromGlobals();
    $response = $kernel->handle($request);
     
    define('IN_PHPBB', true);
    define('ROOT_PATH', "./forum");
     
    if (!defined('IN_PHPBB') || !defined('ROOT_PATH')) {
        exit();
    }
     
    $phpEx = "php";
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : ROOT_PATH . '/';
    include($phpbb_root_path . 'common.' . $phpEx);
    $request->enable_super_globals();
    $user->session_begin();
    $auth->acl($user->data);
     
    $response->send();
    $kernel->terminate($request, $response);
    Mais bon j'ai essayé d'afficher le $user dans le controller et ça ne fait rien, probablement parce que la prise en compte du controller doit se faire dans :
    $response = $kernel->handle($request);

    Et vu que je met le code après bah forcément il rentre bien dans le controller mais n'a pas le user...

    Il doit y avoir quelque chose dans l'inclusion du fichier phpBB qui fait que symfony détraque complètement, je soupçonne une variable du même nom écrasée ou un truc comme ça.

    Ca me déprime là franchement je sais plus quoi faire XD On y est presque, si on arrive à faire fonctionner ça, je pourrais enfin commencer mon site

    Jte remercie en tout cas de m'aider à trouver une solution, c'est cool =)

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Bien sûr qu'il y a conflit. La variable $request de symfony est écrasée.
    Elle est créée ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request = Request::createFromGlobals();
    Écrasée par phpBB dans common.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include($phpbb_root_path . 'common.' . $phpEx);
    $request->enable_super_globals();
    Et ici, c'est le mauvais $request qui est utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $kernel->terminate($request, $response);
    Renomme le request de symfony en $sf_request, puis mets le code phpBB avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $response = $kernel->handle($sf_request);
    puisque c'est cette ligne qui fait toute la "magie" de Symfony. C'est la méthode handle qui lance réellement Symfony.

    Je ne garantis évidemment pas qu'il n'y ait pas d'autres conflits...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Arf il doit y avoir d'autres conflits en effet :/ J'ai toujours ma page blanche (il ne rentre pas dans mon controller)

    Voici ce que j'ai dans le fichier app_dev.php à l'heure actuelle :
    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
     
    <?php
     
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Debug\Debug;
     
    define('IN_PHPBB', true);
    define('ROOT_PATH', "./forum");
     
    if (!defined('IN_PHPBB') || !defined('ROOT_PATH')) {
        exit();
    }
     
    $phpEx = "php";
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : ROOT_PATH . '/';
    include($phpbb_root_path . 'common.' . $phpEx);
    $request->enable_super_globals();
    $user->session_begin();
    $auth->acl($user->data);
     
    // If you don't want to setup permissions the proper way, just uncomment the following PHP line
    // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
    //umask(0000);
     
    // This check prevents access to debug front controllers that are deployed by accident to production servers.
    // Feel free to remove this, extend it, or make something more sophisticated.
    if (isset($_SERVER['HTTP_CLIENT_IP'])
        || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
        || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
    ) {
        header('HTTP/1.0 403 Forbidden');
        exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
    }
     
    $loader = require_once __DIR__.'/../app/bootstrap.php.cache';
    Debug::enable();
     
    require_once __DIR__.'/../app/AppKernel.php';
     
    $kernel = new AppKernel('dev', true);
     
    $kernel->loadClassCache();
    $sf_request = Request::createFromGlobals();
    $response = $kernel->handle($sf_request);
     
    $response->send();
    $kernel->terminate($sf_request, $response);

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Il faudrait que tu postes les messages d'erreurs éventuelles car là...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Ouais jcomprend moi aussi jvois pas le problème c'est que je n'ai justement pas de message d'erreur, j'ai une page blanche :s à partir du moment où je fais l'include il bloque, page blanche aucune erreur d'affichée et il ne rentre pas dans mon controller, jdéprime là xD

  12. #12
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Tu as essayé de mettre le code juste avant kernel->handle()?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    J'avais déjà essayé de placer le code avant $kernel->handle(), mais je viens quand même de retest au cas où. En fait si je ne vide pas le cache sf j'ai une page blanche comme avant, par contre si je vide le cache sf j'ai ces deux exceptions :

    http://image.noelshack.com/fichiers/...a-02-13-57.png
    http://image.noelshack.com/fichiers/...a-02-13-49.png

  14. #14
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    As tu testé des bundles tiers pour se connecter à phpbb ?
    http://knpbundles.com/search?q=phpbb

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Yep j'ai regardé quelques bundles :

    - http://knpbundles.com/phpbb/PhpbbSessionsAuthBundle
    Celui-ci est exactement ce que j'aimerais faire et en plus est semble-t-il géré par phpBB, malheureusement j'ai contacté le développeur le bundle n'a aucune doc et est en cours de développement

    - http://knpbundles.com/GaYAlab/PhpbbEncoderBundle
    Celui-ci permet simplement d'utiliser la méthode d'encodage de phpBB, je ne pense pas pouvoir réellement l'utiliser...

    - https://github.com/widop/WidopPhpBBBundle
    Celui-ci a sa propre version de phpBB, or j'aimerais bien avoir accès aux mises à jour et avoir un accès complet à mon forum. De plus, il n'utilise pas les sessions mais duplique les comptes :/ C'est la solution que je prendrai si jamais je n'arrive vraiment pas à partager les sessions mais j'aimerai réellement réussir, le pire c'est que j'y suis presque il y a juste un conflit que je n'arrive pas à identifier (cf mon premier post)

    Si quelqu'un a une solution je suis preneur

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    J'ai toujours pas avancé, j'ai essayé de parcourir toute la fonction de session de phpBB pour voir ce qui n'allait pas, j'ai essayé de commenter certaines choses, voir jusqu'où mes echo passaient, et là j'en peux franchement plus c'est juste n'importe quoi >< XD

    Pourtant ce que j'aimerai faire n'est en soit pas si compliqué que ça :/ je voudrais juste partager mes sessions phpBB

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    (Désolé, pour les deux posts assez rapprochés niveau temps, mais je voulais que si quelqu'un était abonné à la discussion il reçoive une notification, je n'ai pas trouvé comment delete l'autre post)

    Citation Envoyé par Tsilefy Voir le message
    Il faudrait que tu postes les messages d'erreurs éventuelles car là...
    Je viens de trouver un moyen d'afficher les erreurs, j'ai ajouté ceci en début de app_dev.php :

    Et j'ai enfin une erreur à exploiter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('display_errors', 'On');
    Et j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Cannot redeclare class Symfony\Component\HttpFoundation\FileBag in /Users/Jonathan/Sites/Iggdrasil/app/bootstrap.php.cache on line 348
    Semblerait qu'il essaye de redéclarer un objet (surement déjà déclaré par le symfony de phpBB ?) et ça bloque j'ai essayé d'enlever le bootstrap.php.cache mais ça merdouille dans tous les sens

  18. #18
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    bootstrap.php.cache devrait être régénéré après chaque composer update ou install.

    Pour le régénérer, lance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    composer run-script post-install-cmd
    .

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Le problème c'était pas de le regénérer, ça je l'ai fait. Le problème c'est même après regénération, il m'affiche toujours l'erreur, j'ai regardé dans le fichier et la classe n'est bien déclarée qu'une seule fois, elle a très probablement déjà été déclarée dans le symfony de phpBB :/

    Et en effet j'ai trouvé le fichier FileBag.php avec la déclaration de la classe dans /forum/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation

    Qu'est-ce que je pourrais faire

Discussions similaires

  1. [CKEditor] Impossible de placer un include dans la source
    Par metatron dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 09/08/2006, 16h04
  2. [WSAD]Modification d'un include dans les jsp
    Par milton dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/03/2006, 15h01
  3. [Mail] Mettre un include dans une variable
    Par Death83 dans le forum Langage
    Réponses: 16
    Dernier message: 04/03/2006, 20h01
  4. [Référencement] Gestion des "includes" dans Google
    Par odelayen dans le forum Référencement
    Réponses: 5
    Dernier message: 20/04/2005, 17h07
  5. include dans un VBS ?
    Par rodolphedj dans le forum ASP
    Réponses: 20
    Dernier message: 16/12/2004, 22h57

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