Bonjour,
Je suis tout nouveau dans la cours du phpOO...
Je commence juste à m'y mettre et je suis en train de développez une petite applic pour moi, pour me faire les griffe(cela dit cette applic me tient suffisament à coeur pour que cette erreur me fasse grincer des dents...).
PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0
J'ai déjà googler ça plusieurs fois et j'ai trouvé quelques réponses. On dit que c'est parce que j'ai une gestion des exception perso, et que dans cette gestion, j'appelle justement une fonction qui en lance une... et que php arrête l'applic pour éviter une boucle infinie...
Seul problème me concernant. je n'ai encore jamais lancé d'exception dans mon applic, ni utilisé de bloc try catch... (je suis à mes débuts, et c'est ma prochaine étape). donc je n'ai certainement pas monté un système de gestion perso des exceptions....
Mon code est très simple. Il instancie une classe Page. Puis appelle une méthode startSession (qui n'a que comme seul but de lancer un start_session() ) à partir de cet objet.
Puis je unset mon objet Page et vérifie ma var $_SESSION['userSession']. Si il existe une session, on va passer directement à écrire les pages protégées, en instanciant des classes éritants de Page (comme PageArticle, PageFichier ou PageMembres). Sinon, on instancie une classe PageLogin, qui permet de 1, d'afficher un formulaire de connexion et 2, de verifier la présence du potentiel membre à initier la session, et de poser un message. C'est pendant ce message que je vois l'erreur.
Voici le code:
$dbh = new PDO(DSN1, USER1, PASS1) ;
La méthode $Page->setSession() ressemble simplement à ça:
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 //PARTIE 1 //--------- //INITIER LA PAGE $Page = new Page($dbh) ; $Page->startSession(); $Page->normalisation(); unset($Page); //PARTIE 2 //---------- //Commencer la page if(!isset($_SESSION['session']) || empty($_SESSION['session'])) { //PARTIE 2.a //---------- $Page = new PageLogin($dbh) ; $Page->definirAttrForm('?', 'formConnexion', 'formConnexion', '', 'connecter') ; if(isset($_POST['connecter']) && isset($_POST['username']) && isset($_POST['password'])) { echo $Page->recevoirFormConnexion(htmlentities($_POST['username']), htmlentities($_POST['password'])) ; } else { echo $Page->afficherFormConnexion(); } } else { //PARTIE 2.b //---------- if(isset($_GET['section'])) $section = $_GET['section'] ; else $section = 'documents' ; if($section == 'documents') { $Page = new PageArticles($dbh) ; echo $Page -> retournerHtmlHtml() ; } else if($section == 'fichiers') { $Page = new PageFichiers($dbh) ; echo $Page -> retournerHtmlHtml() ; } }
L'erreur se produit dans ce contexte: Je montre ma page depuis mon localhost (tout va bien). Je rentre mon login mot de passe. Le message me dit que je me suis bien connecté. Me propose de continuer et en bas de la page, l'erreur apparait. Si je click sur Continuer, je retourne au formulaire, et aucune session n a été créée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public function setSession() { start_session(); }
Si je passe le start_session() en commentaire dans ma classe PageLogin (ou si je passe en commentaire le $Page->startSession() dans la partie 1 de mon code principal), l'erreur s'en va. Evidemment ça ne m'arrange pas, puisque j'ai tout de même besoin de ma session.
Ce qui me fait croire que c'est lié avec le start_session().... (mais tout avait bien marché pendant des lustres)...
Ce qui est incroyable maintenant, c est que si je laisse les code de session tel quel, mais que je passe toute la partie 2 en commentaire, l'erreur ne semble pas apparaitre...
Ce qui me fait croire que l'erreur est bien associée au start_session, mais qu'elle est déclenchée lorsque dans ma classe PageLogin, je récupère les identifiants et les passe en superglobale SESSION...
Voilà, j'ai expliqué du mieux que je pouvais, et je suis toujours autant perdu...
Merci à ceux qui ont une idée!
Bonne soirée!
Partager