1 pièce(s) jointe(s)
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:
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:
Pièce jointe 205578
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:
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:
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 |