PHP require-include bloque tout

Résolu
aryal888 Messages postés 12 Statut Membre -  
LeDebatDesPrimaires Messages postés 1 Statut Membre -
Bonjour,
Je n'arrive pas à faire fonctionner un require (ou include) en php. La fin du script ne s'exécute pas dès que l'instruction apparaît.
J'ai index.php :
=============================
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta charset="utf-8" />
<title>Site essai</title>
</head>
<body>
<h1> Titre h1 </h1>
<div>
<p> début texte </p>
</div>
<?php
include ("menu.php");
echo 'OK ';
$menu=" Voilà le menu";
echo $menu;
?>
<div>
<p> Fin texte </p>
</div>
</body>
</html>
============================
puis menu.php :
===================
<?php
function affiche_menu()
{
$menu="Le menu ne s'affiche pas";
return $menu;
echo $menu;
}
$menu="Menu forcé";
echo $menu;
?>
========================

Je précise que ces 2 fichiers sont au même niveau dans l'arborescence.

Lors du test, j'ai :

Titre h1
début texte

puis plus rien

lorsque je déplace "INCLUDE", je constate que rien ne s'exécute dès l'instruction rencontrée
Bien sûr, pareil avec REQUIRE

J'ai cherché partout des heures entières, je ne comprends rien (je débute)

Merci de me guider

9 réponses

  1. dariumis Messages postés 583 Statut Membre 63
     
    Salut , je trouve ton code assez bizarre, je vois pas trop ce que tu veux faire avec ton fichier menu.php. je te conseil de ne faire que des fonctions qui retourne des variables dans les fichier que tu inclus, comme ça tu peux faire tout tes include en haut de tes fichier, elles n'ont pas besoin de ce retrouver dans le body, évite les echo.

    En tous cas dans ta fonction affiche_menu() tu fais un echo après un return, et ça je pense pas que ce soit valide.
    0
  2. afrnos Messages postés 61 Statut Membre 16
     
    Bonsoir,

    Je viens de tester ton code, tel quel, et je ne rencontre aucun problème. J'ai bien le "Menu forcé" qui s'affiche.

    Travailles-tu en local ?
    0
  3. aryal888 Messages postés 12 Statut Membre 1
     
    @dariumis : j'ai volontairement retiré tout le code utile qui était dans menu et même dans index pour simplifier et tester
    @afrnos : je travaille en local. J'ai déjà fait un site qui fonctionne très bien en local,. J'utilise MAMP et je teste en cliquant sur "Ouvrir la page d'accueil". Ca marche toujours, sauf pour ce script. Si j'enlève l'"INCLUDE",
    le script se déroule jusqu'au bout , j'obtiens :

    Titre h1
    début texte

    Fin texte

    Merci à vous 2 d'essayer de m"aider. Je vous ai mis mes fichiers dans leur intégralité, peut-être manque-t-il quelque chose??
    0
  4. le père
     
    Bonjour

    Si tu n'enlèves que le "include", ça devrait encore t'afficher 'OK' et 'Voilà le menu'.
    Est-ce bien le cas ?
    As-tu regardé le source de la page générée (Crtl-U dans le navigateur) pour voir si la balise <?php est là ou pas ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. aryal888 Messages postés 12 Statut Membre 1
     
    Si je n'enlève que la ligne INCLUDE, j'ai cela :

    Titre h1

    début texte

    OK Voilà le menu
    Fin texte

    et code source :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    <meta charset="utf-8" />
    <title>Site essai</title>
    </head>
    <body>
    <h1> Titre h1 </h1>
    <div>
    <p> début texte </p>
    </div>
    OK Voilà le menu<div>
    <p> Fin texte </p>
    </div>
    </body>
    </html>

    ====================
    lorsque je remet la ligne INCLUDE :
    Titre h1

    début texte

    et le code source :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
    <meta charset="utf-8" />
    <title>Site essai</title>
    </head>
    <body>
    <h1> Titre h1 </h1>
    <div>
    <p> début texte </p>
    </div>

    Merci encore de m'aider. C'est vraiment cet include qui ne passe pas (require pareil)
    Pas d'erreur, simplement cet arrêt du script

    C'est certainement un truc énorme... mais lequel ?
    Je répète que je suis débutante dans ce domaine...

    Merci
    0
  7. le père
     
    Rajoute au tout début de ton script (avant le <!DOCTYPE) :
    <?php error_reporting(E_ALL); ?>
    Ça fera peut-être apparaître un message d'erreur.
    Autre essai à faire : effacer le contenu de menu.php pour voir si c'est l'include ou le contenu du fichier qui pose un problème.
    0
  8. aryal888 Messages postés 12 Statut Membre 1
     
    J'ai rajouté la ligne <?php error_reporting(E_ALL); ?> comme demandé, pas de message d'erreur
    Dans menu.php, j'ai mis comme seule instruction echo "coucou";
    même problème
    j'ai supprimé écho "coucou"; donc il me reste :
    <?php
    ?>
    et là miracle tout s'affiche, (je comprends encore moins !!!)

    Désolée de vous casser la tête...
    Merci
    0
  9. aryal888 Messages postés 12 Statut Membre 1
     
    Re miracle
    Je viens de remettre echo 'coucou';
    avec simples quotes, cela fonctionne
    j'ai remis les doubles , cela marche aussi

    Donc, je vais remettre mes véritables instructions pour voir si je m'en sors...

    Je suis débutante dans ce domaine, mais j'ai développé "dans ma jeunesse" des logiciels, et je me souviens avoir eu avec des collègues des problèmes bizarres, cad il suffisait de tout effacer et ressaisir le texte pour que cela fonctionne, nous en déduisions qu'il devait y avoir des caractères parasites invisibles dans certains cas, car là j'ai tout effacé et ressaisi... !!!!???

    Merci encore de m'avoir guidée
    0
  10. LeDebatDesPrimaires Messages postés 1 Statut Membre
     
    Ton fichier inclu finissait certainement par un commentaire non fermé. C'est à dire que tu avais débuté un commentaire à la fin du ficher sans le refermé avec une balise fermante. Donc l'include a commenté le reste de ton code qui a reçu l'include et l'a donc rendu invisible. Je viens de me résoudre le même problème tout seul. :)

    (Je sais que je déterre un vieux message mais comme ce topic est référencé par google et qu'aucune vraie solution n'a été apportée alors je le mets à jour.)
    0