Bonjour,
Je souhaiterais attraper une erreur de type E_ERROR, mais je ne sais pas comment faire ; il y a bien la solution du set_error_handler() mais selon la doc http://fr.php.net/manual/fr/function...or-handler.php ce type d'erreur n'est pas gérable avec.
Je m'explique. Dans la partie du php "pur", j'utilise require_once(test1.php); qui à son tour require_once(test2.php);. Si test1.php ou test2.php n'existe pas, l'execution du script se termine, ce qui est normal, c'est le comportement que je souhaite.
Maintenant, je souhaite réutiliser certaines classes que j'ai développé et que j'utilise dans la partie php "pur" dans une petite partie ajax ; n'y connaissant pas grand chose à ajax, j'ai suivi le tuto http://siddh.developpez.com/articles/ajax/ et c'est là que le bas blesse ! Voici mon ajaxxml.php personnalisé :
J'ai réalisé la fonction ajax_include_once() afin d'attraper les warnings du include_once() avant le header() (logique
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 <?php function ajax_include_once($filename) { ob_start(); include_once($filename); $content = rtrim(ob_get_contents()); //while (ob_get_level()) { ob_end_clean(); //} if ($content != '') { return $content; } else { return 'OK'; } } $selection = $_POST['selection']; $value = $_POST['value']; $response = '<?xml version="1.0"?>'; $result = ajax_include_once($_SERVER['DOCUMENT_ROOT'] . '/test1.php'); if ($result == 'OK') { $response .= "<response><message><![CDATA[<select name=\"menu\"><option></option><option>toto</option><option>titi</option></select>]]></message></response>"; } else { $response .= "<response><message><![CDATA[<p id=\"error\">erreur:$result</p>]]></message></response>"; } header('Content-Type: text/xml'); echo $response; } ?>). Ainsi la partie ajax affiche l'erreur d'include si test1.php n'existe pas. Dans ce cas, "tout va bien", je suis capable de gérer l'erreur survenue, à savoir que le include() a foiré. En quelques sortes, tout va bien.
Et donc voici mon problème : test1.php require_once("test2.php"); et si test2.php n'existe pas, non seulement l'exécution du script s'arrête mais en plus cela écrit un content-type html avant le header() malgré le ob_end_clean() ; ainsi dans la partie ajax xhr.responseXML est null.
Partager