Page 1 sur 1

require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 18 oct. 2012, 16:26
par Targol
Bonjour à tous,

Depuis plusieurs heures, je lutte contre un problème que je ne parviens pas à comprendre.
J'ai un template php (menu_js.php)qui contient du code permettant un appel ajax pour mes menus :
<?php if(!session_id()) {session_start(); } ?>

<script type="text/javascript">

        $("#<?=$menuId?>").bind("click", function (event){
            event.stopPropagation();
            <?php require $_SESSION['ROOT_PATH'] . '/templates/core/loadFrame_js.php';?>
        });

</script>
Dans mon index.php, ce fichier est inclus plusieurs fois via des require et fonctionne très bien.

Par contre, dans un div chargé par Ajax, je tente d'utiliser le même include sans qu'il ne me génère aucun code ni me lève d'erreur.
Si, par exemple, j'entoure le "require" de 2 "echo" :
	
echo "before (root=" . $_SESSION['ROOT_PATH'] .")";
require $_SESSION['ROOT_PATH'] . '/templates/core/menu_js.php';
echo "after";
j'obtiens en sortie :
before (root=/home/parents/dev/Eclipse/Eclipse_Workspace/ClaveV2)after
sans AUCUN MESSAGE D'ERREUR dans la log.

Ce qui me parait impossible vu que :
  • soit le require fonctionne et le tag script est rajouté dans ma page,
  • soit il ne fonctionne pas mais je devrais avoir une erreur PHP dans la log.
Si quelqu'un trouve, il aura droit à ma reconnaissance éternelle.

PS : j'ai tenté de "tuner" la log sans plus de résultats :
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
ini_set('display_errors', 'on');

Re: require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 18 oct. 2012, 18:15
par xTG
PHP s'exécute côté serveur.
Javascript côté client.
Quand PHP a fini de s'exécuter ton navigateur a tout juste commencé à recevoir la page.

Voilà de quoi comprendre : http://phpdebutant.org/article118.php ;)

Re: require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 18 oct. 2012, 18:28
par Targol
PHP s'exécute côté serveur.
Javascript côté client.
Quand PHP a fini de s'exécuter ton navigateur a tout juste commencé à recevoir la page.
Je sais parfaitement ça. Ca doit à peu près faire 15ans que je développe des sites web. :wink:
Le fait que le php s'exécute sur le serveur ne devrait pas l’empêcher de m'afficher la balise "script" et son contenu sur ma page.
Mon problème n'est pas que le script ne fonctionne pas, c'est qu'il n’apparaît pas sur la page !

Re: require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 18 oct. 2012, 20:12
par moogli
salut,


Ce bout est appelé via un appel ajax ? (dans le cas qui te pose problème) c'est bien sa ?

comment est que tu vérifie
c'est qu'il n’apparaît pas sur la page !
car si appel ajax tu ne verra pas dans le source, seulement avec un débogueur JS

Pour l'error_reporting utilise seulement E_ALL pour le dev. (au pire configure ta machine de dev dans ce sens :) ).


ensuite pour ce qui est de charger du code JS a "chaud" je ne sais pas comment cela fonctionne j'ai jamais testé :D

@+

Re: require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 18 oct. 2012, 21:04
par Targol
Ce bout est appelé via un appel ajax ? (dans le cas qui te pose problème) c'est bien sa ?
Toutafé
comment est que tu vérifie
c'est qu'il n’apparaît pas sur la page !
car si appel ajax tu ne verra pas dans le source, seulement avec un débogueur JS
Avec les outils pour développeur Web fournis dans firefox (notamment l'item "examiner l’élément" en menu contextuel), on peut voir le code de la page à un instant t, pas seulement le source. De même, on peut voir les styles appliqués à chaque objet, y compris les styles non présents dans une des CSS du site (parce que surchargé, par exemple, en Java script).
ensuite pour ce qui est de charger du code JS a "chaud" je ne sais pas comment cela fonctionne j'ai jamais testé :D
Ça marche très bien, mais la question n'est pas là puisque dans cette page, ET DANS CE SEUL CAS LÀ, ça ne fonctionne pas.
Le même include est utilisé au moins une 10aine de fois dans le code sans problème (le script apparaît bien dans la page) mais pas pour cette page là.

Re: require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 19 oct. 2012, 08:51
par xTG
Mea culpa j'ai lu un peu vite et ai dégagé le require dans le second code en pensant à une sauvegarde de données en session... T_T

Si je récapitule c'est un code Javascript que tu charges via require.
A l'exécution du script PHP ta fonction bind est vide comme si le require ne fasait rien ?
Quid du cache ? (l'est tellement chiant celui là qu'il joue bien des tours même aux plus expérimentés.)
Et si tu charges le fichier dans un onglet tu as bien un affichage du script ?

De plus t'as un souci dans ton code...
Tu initialises une session si elle n'existe pas (bon passons le fait que tu as du code HTML en amont et donc que la session peut échouer...) et donc ta variable ROOT_PATH peut être inexistante dans certains cas.

Re: require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 19 oct. 2012, 09:06
par sirakawa
Depuis Omaha beach,
car je débarque.
Juste une question concernant la programmation en abyme, comme les récits en abyme ou en poupées russes pour les américanophobes:

Q'est censé faire ce code (inclus vraisemblablement dans un autre code)
PHP qui manipule assez curieusement une session_id : s'il est à faux, on ouvre ue session; et que fait-on s'il est à vrai?
suivi d'un script javascript contenant lui-même du PHP qui inclut ce qui a tout l'air d'être du javascript.

Re: require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 19 oct. 2012, 09:41
par Mazarini
La dernière fois que j'ai eu des problèmes avec des messages d'erreur ou plutôt une absence de message d'erreur, j'ai bricoler un script avec des erreurs (je sais très bien faire) pour résoudre le problème d'affichage des erreurs.
A défaut de résoudre le problème, cela permet de vérifier l'affichage des messages d'erreur.

Re: require ne fonctionne pas mais ne lève pas d'erreur.

Posté : 19 oct. 2012, 10:02
par Targol
Merci de vos réponses.

De mon côté, pour avancer un peu, j'ai continué mes tests.
En changeant le contenu de mon fichier php ajouté par le require (remplacement du code js par un "alert('wtf ?');", j'ai pu constater que, bien que la balise script n'apparaisse nulle part dans le code généré (ce qui n'est pas le cas dans les autres endroits où j'utilise le même mécanisme), le script est bien présent et actif.

Mon problème vient donc bien du java script qui ne s'exécute pas correctement.
Ce problème peut donc être considéré comme résolu.

... Mais tout ça ne m'explique pas pourquoi je ne vois pas mon script dans les sources générées... #-o