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 :

Code php non interprété avec ob_start


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2014
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Code php non interprété avec ob_start
    Bonjour tout le monde, je fait appel a vous tous car j'ai un petit problème concernant mon site web: j'utilise en effet le ob_start pour intégrer les pages du site sur un template que je stocke dans une variable pour le reafficher... Cependant, j'ai certaines pages contenant du code php pur comme celle-ci:

    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
     
    <?php
    Auth::allow(1, $session);
    if (isset($_POST) && !empty($_POST))
    {
    	if (isset($_POST['article']))
    	{
    		$user = $_SESSION['Auth'];
    		$article = ArticlesManager::getArticleByToken($db, $_GET['article']);
    		if (isset($article) && !empty($article))
    		{
    			if ($user->getGrade() == 3)
    			{
    				ArticlesManager::acceptArticle($db, $_GET['article']);
    				$session->setFlash('success', "L'article à été correctement accepté");
    				App::redirect("index");
    				die();
    			}
    			else
    			{
    				App::redirect("errors/403");
    			}
    		}
    		else
    		{
    			App::redirect("errors/404");
    		}
    	}
    	else
    	{
    		App::redirect("errors/403");
    	}
    }
    else if (isset($_GET['article']))
    {
    	?>
     
     
    	<div id="content">
    		<h1>Confirmer la validation</h1>
    		<form method="post">
    			<input type="hidden" name="article" value="<?php echo $_GET['article'] ?>"/>
    			<button type="submit">Confirmer la validation</button>
    		</form>
    	</div>
     
    	<?php
    }
    else
    {
    	App::redirect("errors/403");
    }
    Cependant, ce n'est pas le contenu délivré par ce code mais le code brut qui s'affiche sur ma page comme le montre l'image ci dessous:

    Nom : bug.png
Affichages : 146
Taille : 277,8 Ko

    J'ai remarqué en inspectant l'élément que le code était remplacé par des commentaires HTML <!--...--> lors de la présence des balises PHP suivantes: <? ... $variable->methode();

    Cela donne ce code (en regardant avec l'inspection de Chrome):
    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
    <!--Contenu principal de la page-->
    	    <article id="article">
    		//Ici, ca devrait être le contenu et non du php qui s'affiche mais la balise <? à été transformée en <!--?
    		<!--?phpAuth::allow(1, $session);if (isset($_POST) && !empty($_POST)){
                          if (isset($_POST['article'])){		
    				$user = $_SESSION['Auth'];*
    				$article = ArticlesManager::getArticleByToken($db, $_GET['article']);
    				if (isset($article) && !empty($article))
    				{
    					if ($user--->getGrade() == 3) //Ici le code $user-> à été remplacé par $user--->
    					{
    						ArticlesManager::acceptArticle($db, $_GET['article']);
    						$session->setFlash('success', "L'article à été correctement accepté");
    						App::redirect("index");
    						die();			
    					}			
    					else
    					{
    					App::redirect("errors/403");
    					}
    				}
    				else
    				{
    					App::redirect("errors/404");
    				}
    			}
    			else
    			{
    				App::redirect("errors/403");
    			}
    		}
    		else if (isset($_GET['article']))
    		{
    	?>
    	<div id="content">
    		<h1>Confirmer la validation</h1>
    		<form method="post">
    			<input type="hidden" name="article" value="wcF8AdMn8ixZviiOADpqz5C9Y"/>
    			<button type="submit">Confirmer la validation</button>
    		</form>
    	</div>
    	<?php
    }
    else
    {
    	App::redirect("errors/403");
    }
    	    </article>
    Ce bug ne s'est jamais produit et ne se produit ps en local (WAMP)...

    Ma version de PHP est 5.6.19 sur mon serveur et en local, celle-ci est 5.5.12.

    Merci de vos réponses futures,

    Cordialement,

    Quentin

    PS: ma page d'index qui intègre le template et la page:

    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
    <?php
    	header( 'content-type: text/html; charset=utf-8' );
    	/*Définition du fuseau horaire*/
    	date_default_timezone_set('Europe/Paris');
    	/*Ajout des objets permettant la gestion de tous les éléments du site*/
    		/*Base de données*/
    		require "class/bootstrap.php";
    		$db = App::getDatabase();
    		$session = Session::getInstance();
     
    	/*Ajout de la connexion pseristante*/
    	if(isset($_COOKIE['auth']) && !isset($_SESSION['Auth']))
    	{
    		$auth = $_COOKIE['auth'];
    		$auth = explode(' ', $auth);
    		$user = $db->query('SELECT * FROM users WHERE token = ?', array($auth[1]))->fetch();
    		if($auth[1] == $user->token && $auth[2] == sha1($user->token.$user->password.$user->pseudo))
    		{
    			$session->setFlash('success', "Votre session à bien été récupérée");
    			if(Auth::loginPseudo($db, $user->pseudo, $session, true))
    			{
     
    			}
    			else
    			{
    				$session->setFlash('danger', "Une erreur s'est produite lors de la récupération de votre compte");
    				setcookie('auth', '', time() - 3600, '/');
    			}
    		}
    		else
    		{
    			setcookie('auth', '', time() - 3600, '/');
    		}
    	}
     
    	/*Definition de la variable de la racine du site internet*/
    	define("WEBROOT", "");
     
    	/*Si la variable de page n'est pas définie, on redirige l'utilisateur vers l'accueil (index)*/
    	if(!isset($_GET["p"]))
            {
                $_GET["p"] = "index";
            }
     
    	/*Si la page spécifiée n'existe pas, on redirige l'utilisateur vers la page d'erreur 404 (not found)*/
            else if(!file_exists("content/".$_GET["p"].".php"))
            {
                $_GET["p"] = "/errors/404";
            }
     
    	/*
    	 *Demarrage de la mise en cache :
    	 *Jusqu'à l'ob_end_clean(), aucune donnée n'est envoyée au navigateur,
    	 *tout le code html est mis en cache et peut être enregistré dans une variable.
    	*/
            ob_start();
    	/*Inclusion de la page spécifiée (qui sera mise en cache et non envoyée au navigateur*/
            include("content/".$_GET["p"].".php");
    	/*Enregistrement du contenu mis en cache dans la variable $content*/
            $content = ob_get_contents();
    	/*Arrêt de la mise en cache et effacement des données mises en cache*/
            ob_end_clean();
     
    	/*Affichage du thème*/
    	include("template.php");
            //Dans le template, on a un echo $content; pour afficher la page

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    est ce que sur le serveur de production le output_buffering n'as pas été désactivé ?
    si tu fais une page très basique, est ce que cela fonctionne ?
    vérifie aussi la mémoire allouée au buffer.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2014
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Une page basique fonctionne très bien, mais dès que les 2 balises indiquées apparaissent, le code s'affiche brut car les balises sont remplacées

Discussions similaires

  1. [COM] PHP::COM et Apache
    Par lebdenat dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 12/06/2006, 14h59
  2. [PHP-JS] Problème php-javascript (suite)
    Par nicoaix dans le forum Langage
    Réponses: 4
    Dernier message: 21/12/2005, 10h47
  3. [XSLT] Problème PHP + XSL
    Par thefaycal dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/12/2005, 09h16
  4. Réponses: 1
    Dernier message: 12/09/2005, 11h28

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