logger une erreur malgrès un 'die'

Petit nouveau ! | 7 Messages

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:
Modifié en dernier par titia le 11 juil. 2005, 17:30, modifié 1 fois.
J'adore qu'un plan se déroule sans accrocs!!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 juil. 2005, 17:24

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

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();
}

Petit nouveau ! | 7 Messages

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:
J'adore qu'un plan se déroule sans accrocs!!

Administrateur PHPfrance
Administrateur PHPfrance | 250 Messages

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