logger une erreur malgrès un 'die'

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : logger une erreur malgrès un 'die'

par matt_m » 11 juil. 2005, 23:41

sinon ce que tu peux faire c'est si tu es sous php5 c'est changer le gestionnaire d'erreurs
tu as un fichier error_handler.php
/**
 * redefinition du gestionnaire d'erreurs
 * 
 * @param int $errno : le code d'erreur
 * @param string $errstr : le message d'erreur
 * @param string $errfile : le fichier d'erreur source
 * @param string $errline : la ligne d'erreur dans ce fichier
 * @return void
 */
function ErrorHandler($errno, $errstr, $errfile, $errline) {
    // tu loggues ton erreur avec ta methode log
    log($errstr);
    
	switch ($errno) {
		case E_CORE_ERROR :
		case E_CORE_WARNING :
		case E_COMPILE_ERROR :
		case E_COMPILE_WARNING :
		case E_PARSE :
		case E_USER_WARNING :
		case E_USER_NOTICE :
			{
				break;
			}
        case E_USER_ERROR :
		default :
			{
				echo "Une erreur technique est survenue<br/>";
				echo "veuillez nous excuser pour ce désagrement<br/>";
				exit(1);
			}
	}
}
// tu redefinis ton gestionnaire d'erreur
set_error_handler("ErrorHandler");
et dans ton fichier realisation ta connexion tu fais
// inclusion du gestionnaire d'erreur
include_once 'error_handler.php';

if (!$db = mysql_connect($host, $login, $pwd)) {
           // va terminer ton programme
           trigger_error('cannot connect to db', E_USER_ERROR);
} 
if (!mysql_db_query ( $tadb, 'select * from matable',$db)) {
            // logguera seulement ton erreur
             trigger_error('query throw error', E_USER_WARNING);
}
// la suite de ton programme
...
cette methode va permettre d'implementer le meme gestionnaire d'erreur, et de te permettre de moduler la reponse en fonction du niveau d'erreur que tu leves

par titia » 11 juil. 2005, 17:30

merci beaucoup je ne pensais pas pouvoir exécuter une fonction dans die puisqu elle est décris ainsi
void die ( string message)
mais ca fonctionne il me suffit de faire un echo dans ma fonction log et ca fonctionne
merci encore et désolé du dérangement :wink:

par ouckileou » 11 juil. 2005, 17:27

j'avais pas vu que tu voulais l'afficher aussi, j'ai répondu trop vite

mais tu veux absolument faire ça directement avec die() ?

pourquoi pas comme ça :
$result = mysql_query ($query);
if (!$result) {
   echo "erreur : ".mysql_error();
   log();
   exit();
}

par zeus » 11 juil. 2005, 17:25

Peut être qu'en utilisant connection_aborded au redémarrage de l'application, tu pourras écrire dans ton fichier de log à ce moement là

Pas testé, pas essayé, proposition au feeling :roll:

par ouckileou » 11 juil. 2005, 17:24

et avec ça :
... or die(log());
?

logger une erreur malgrès un 'die'

par titia » 11 juil. 2005, 17:16

Bonjour,

Je fais une requete sql simple et si elle ne fonctionne pas je voudrais que le script s arrete et que l erreur s affiche et en plus qu elle sois logger dans un fichier.
J ai fait une fonction qui crée le log que je veux mon probleme reside dans le :

$result = mysql_query ($query) or die .....

le die affiche ce que je veux mais je ne peux pas mettre ma fonction log derriere forcement....
Je peux pas la mettre avant non plus puisque je ne détecterait pas d erreur.
je voulais donc enlever le die et mettre un : "or log()"
et dans ma fonction log mettre un exit() mais ca marche pas forcement arg.
Je suis sure que ca doit pas etre bien compliqué mais je sèche snif....
si quelqu'un à une idée merci :oops: