2010-02-02 5 views
3

Je suis en train de construire une classe d'erreurs et beaucoup de classes d'erreur que j'ai regardé dans le passé l'utilisation FICHIER et LINE pour montrer où l'erreur est survenue, mais ils les utilisent dans la fonction afin qu'ils soient toujours les mêmes, ce qui est une information hautement inutile. Mis à part l'envoi d'un tableau contenant FILE et LINE avec toutes les fonctions (ce qui serait assez pénible), je ne peux pas penser ou trouver autre chose. Existe-t-il un bon moyen ou une bonne fonction pour déterminer le bon numéro de ligne et le bon fichier à partir duquel la fonction a été exécutée?Déterminer quelle ligne une fonction a été exécutée à partir

Exemple:

<?php 
// file1.php 
dosomething(false); 
?> 

<?php 
// file2.php 
function dosomething($input) { 
    if ($input === false) die("Error at Line (line) in File (file)"); 
} 
?> 

La fonction mourraient avec le message "Erreur à la ligne 3 dans le fichier /file1.php".

Répondre

4

Je suppose qu'une solution pourrait être d'utiliser debug_backtrace.

L'exemple donné obtient un backtrace comme ceci:

array(2) { 
[0]=> 
array(4) { 
    ["file"] => string(10) "/tmp/a.php" 
    ["line"] => int(10) 
    ["function"] => string(6) "a_test" 
    ["args"]=> 
    array(1) { 
     [0] => &string(6) "friend" 
    } 
} 
[1]=> 
array(4) { 
    ["file"] => string(10) "/tmp/b.php" 
    ["line"] => int(2) 
    ["args"] => 
    array(1) { 
     [0] => string(10) "/tmp/a.php" 
    } 
    ["function"] => string(12) "include_once" 
    } 
} 

Alors, devrait inclure ce que vous voulez ;-)


Et si vous voulez juste à la sortie de la trace (peu probable), il y a aussi debug_print_backtrace.

0

La fonction que je utilise sur mes sites:

<!DOCTYPE HTML> 
<html> 
<head> 
<title>Determine what line a function was executed from</title> 
</head> 
<body> 
<?php 
    function linea($string1, $linea, $string2 = NULL) 
    { 
     $string2 = !empty($string2) ? $string2 : ''; 
     return $string1 . $linea . $string2; 
    } 
    echo linea('Error: ', __LINE__) . '<br />'; 
    /* 
    ... 
    lot of code 
    ... 
    */ 
    echo linea('Alert -> ', __LINE__, '!') . '<br />'; 
?> 
</body> 
</html> 

Sorties:

Error: 13 
Alert -> 19! 
Questions connexes