Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Manejo de Errores en PHP (POO)

Estas en el tema de Manejo de Errores en PHP (POO) en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bueno, digamos que tuve una noche "agitada" y mientras estaba comenzando a desarrollar unas clases que van a formar parte del NokTemplates2, descubrí que necesitaba ...
  #1 (permalink)  
Antiguo 21/09/2003, 02:56
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 6 meses
Puntos: 69
Manejo de Errores en PHP (POO)

Bueno, digamos que tuve una noche "agitada" y mientras estaba comenzando a desarrollar unas clases que van a formar parte del NokTemplates2, descubrí que necesitaba algún tipo de "manejo de errores" para una aplicación. Dado que PHP4 aún no tiene soporte para Excepciones ( que si tendrá PHP5 ) se me dio por hacer un objeto que administre los errores, pero quería que esto se hiciera automáticamente, o sea, nada de estar indicando $objError->error("algo salió mal"); sino que queria utilizar las funciones que nos da PHP actualmente para el manejo de los errores.

Así que leyendo entre algunas cosas que recordaba, y revisando en los comentarios de PHP.net, conseguí implementar un truquito para "atrapar" errores Fatales ( que a set_error_handler se le escapan ).

Es así que terminé con una clase simple, que les comparto, para que la puedan estudiar, darme sus opiniones, sugerir mejoras, etc. El "Sistemita" está compuesto de 2 clases, AdminError y Contexto, este es el código de los mismos:
Código PHP:
class AdminError
{
    function 
AdminError()
    {
        function 
adm_error($numero$mensaje$archivo$linea$contexto$retorna=0)
        {
            
$objContexto = new Contexto($numero$mensaje$archivo$linea$contexto);
            if(
$retorna
                return 
$objContexto->leer();
            else
                print 
$objContexto->leer();
        }
        
        function 
errorFatal($buffer)
        {
            
$buffer_temporal $buffer;
            
$texto strip_tags($buffer_temporal);
            if(
preg_match('/Fatal error: (.+) in (.+)? on line (\d+)/'$texto$c))
                return 
adm_error(E_USER_ERROR$c[1], $c[2], $c[3], ""true);
            return 
$buffer;
        }
        
ob_start('errorFatal');
        
set_error_handler('adm_error');
    }
}

/** 
 * Clase Contexto
 * Devuelve el contexto de la linea de un archivo.
 *
 **/
class Contexto
{
    
/**
     * Atributo
     *
     **/
    
    
var $_numero "";
    
    
/**
     * Atributo
     *
     **/
    
    
var $_mensaje "";
    
    
/**
     * Atributo
     *
     **/
    
    
var $_lineas 5;

    
/**
     * Constructor
     * @access protected
     */
    
function Contexto($numero$mensaje$archivo$linea$contexto)
    {
        
$this->_mensaje "
        <b>Error:</b> $mensaje<br><hr>
        <b>Archivo:</b> $archivo<br><hr>
        <b>Línea:</b> $linea<br><hr>
        <b>Contexto del Código:</b><br><pre>"
.
        
$this->obtenerContexto($archivo, (int) $linea)."</pre><hr>";
    }
    
    
/**
     *
     * @access public
     * @return void 
     **/
    
function leer()
    {
        return 
$this->_mensaje;
    }
    
    
/**
     *
     * @access public
     * @return void 
     **/
    
function obtenerContexto($archivo$linea)
    {
        if (!
file_exists($archivo)) 
        { 
            
//  Nos fijamos que el archivo exista
            
return "El contexto no puede mostrarse - ($archivo) no existe"
        } elseif ((!
is_int($linea)) OR ($linea <= 0)) { 
            
//  Verificamos que el numero de linea sea válido
            
return "El contexto no puede mostrarse - ($linea) es un número inválido de linea"
        } else {
            
//  leemos el codigo
            
$codigo file$archivo );
            
$lineas count($codigo);

            
//  calculamos los numeros de linea
            
$inicio $linea $this->_lineas
            
$fin $linea $this->_lineas
            
//  verificaciones de seguridad
            
if ($inicio 0$inicio 0;
            if (
$fin >= $lineas$fin $lineas;
            
$largo_finstrlen($fin) + 2;
            
            for (
$i $inicio-1$i $fin$i++)
            { 
                
//  marcamos la linea en cuestion.
                
$color=($i==$linea-1?"red":"black");
                
$salida[] = "<span style='background-color: lightgrey'>".($i+1).
                            
str_repeat("&nbsp;"$largo_fin strlen($i+1)).
                            
"</span><span style='color: $color'>".
                            
htmlentities($codigo[$i]).'</span>';
            } 
            return 
trim(join(""$salida)); 
        }
    }

Un Scrip de ejemplo, para mostrar el úso de la clase, es el siguiente:
Código PHP:
<?php
// activamos todos los errores
error_reporting(E_ALL);

include(
'./clases/class.AdminError.php');

$error = new AdminError;
// Esto produce dos Notices
echo $data[constante_que_no_existe];
// Esto produce un Warning
$handler "No soy un handler adecuado";
$data fgets($handler23);
// Esto produce un Fatal Error
funcion_que_no_existe();
?>
Primero, si hay un Fatal Error, solo va a mostrar ESE Fatal Error hasta que sea arreglado. Luego, si el script solo contiene Warnings o Notices los muestra todos juntos, junto a la linea que provoca el error y ( por defecto ) las 5 lineas anteriores y posteriores a la linea "conflictiva".

Que queda por hacer? Ufff.. muchisimas cosas:
  • Aún el objeto no atrapa errores del Tipo "Parse Error"
  • No atrapa Fatal Errors provocados por las clases AdminError y Contexto
  • Me gustaria que el coigo se mostrara como highlight_string, pero no puedo por ser una funcion "handler" de output_buffering.
  • Como no puedo utilizar ob_start, no puedo mostrar los contenidos de la variable "$contexto" para dar una idea del estado de las variables al momento de creado el error.
  • Algo más que se me ocurra en el camino.
Espero que no se hayan aburrido con un Post tan largo y específico. Espero que esta idea del trabajo con Errores les agrade, y sino, por favor, muestren sus técnicas para el trabajo de este tipo.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #2 (permalink)  
Antiguo 21/09/2003, 05:41
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 22 años, 6 meses
Puntos: 5
Bien bien, me parece una clase muy buena y esta muy bien escrita, pero .... no tiene PHP ya un buen manejador de errores?¿

El caso es que comentas que como PHP4 no cuenta con excepciones realizaste esa clase, yo no veo que realice excepciones jeje tan solo me parece que envia los errores normales de PHP, lo unico que traducidos al castellano , si se quiere tener un manejador de errores propio pues esta muy bien jeje pero talvez se quede un poco corta y seria preferible usar los errores de PHP no?¿ talvez no e entidod muy bien el post ya que es domingo de resaca jeje pero bueno ... ahi queda mi critica
__________________
Usuario registrado de Linux #288725
  #3 (permalink)  
Antiguo 21/09/2003, 09:16
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 6 meses
Puntos: 69
Epples, que tal? Gracias por responder este mensaje.
Cuándo dices si PHP no tiene ya un manejador de errores... a que te refieres exactamente? A las funciones como trigger_error() o set_error_handler()? Porque si a esas te refieres, son exactamente de las que me valgo para hacer un manejador de Errores, pero basado en la POO.

No tengo ningún problema con las funciones de por si, pero si vamos a poner funciones comunes en nuestro código, queda todo preparado a ser factible de que en el futuro, si hay que cambiar algo, haya que modificar en muchos lados. Mejor modificar 1 solo objeto que se encarga del trabajo, no ?

Aparte, set_error_handler() trabaja perfectamente con los errores del Tipo Warning o Notice ( o esos errores "leves" ) pero no atrapa los errores del tipo Fatal Error. Mi clase si, haciendo uso del Output Buffering y adivinando por la salida, si un Fatal Error ocurrió o no.

Otra característica que tiene esta clase, es que al producirse un error, te muestra X cantidad de lineas del archivo donde se PRODUJO el error, para que enseguida se pueda ver la linea (marcada en rojo) y el posible error. Espero hoy poder subir una o dos capturas de como se ve una página de error común ( que todos conocemos ) y una generada por la clase, para ver la diferencia. Además, también atrapa los errores lanzados por un usuario con trigger_error() como si nada .

Quizás anoche también era demasiado tarde para mi y no supe explicarme un poco mejor los alcances del objeto.. pensar que eran las 5 de la mañana y ya quería irme a la cama...

Bueno, espero que ahora se entienda un poco mejor el propósito de la clase... me falta seguir extendiendola un poco y escribir un poco de documentación y ejemplos, que es con lo que más se entiende... pero claro.. es domingo y hay que ir a comer un asado primero... Quizás más tarde.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com

Última edición por Webstudio; 21/09/2003 a las 09:18
  #4 (permalink)  
Antiguo 21/09/2003, 18:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Pues .. jeje que decir. Exelente la classe de gestión de errores ..

Me gustó la funcionalidad de que muestre X línea de código cercana a donde produjo el error ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 21/09/2003, 21:19
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 6 meses
Puntos: 69
Bueno, como prometí, acá están las capturas, de un mismo script, que en el primer caso utiliza un error personalizado, lanzado con trigger_error(); y SIN tener activada la clase de manejo de errores:

Y aqui tenemos el mismo error, pero atrapado por la clase de Errores :

(Sepan disculpar por el tamaño de las imagenes).

Bueno, espero que les agrade la diferencia y sigo abierto a comentarios y opiniones.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 22/09/2003, 00:56
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 22 años, 6 meses
Puntos: 5
JEJEJEJEJEJE :DD Pablito!!!! muy bien ahora te entiendo :P jejejejeje yo empece a hacer algo similiar pero no era en PHP era en C y con la API de Zend, una extension para debugear archivos PHP :P con tu code me acabas de dar una gran idea!!!!!! PARA EL PHP-EDDI-DEV :P muchas gracias!!!!!!!!!!!!!!!!!!!!!!! cuando la tengas terminada cuelgala que le metere mano :P y le implementare soporte para GTK :P, al metodo obtenerContexto() se le podria añadir un parametro mas jeje para indicar salida web o salida en una consola de GTK :P jajaja me lo mirare intensamente
__________________
Usuario registrado de Linux #288725

Última edición por epplestun; 22/09/2003 a las 01:01
  #7 (permalink)  
Antiguo 22/09/2003, 12:48
Nok
 
Fecha de Ingreso: abril-2001
Mensajes: 302
Antigüedad: 23 años
Puntos: 0
Que mas que decir, que excelente la clase. Esto nos ayuda a tener mas control sobre lo que escribimos... y ademas, queda mas bonito

Una cosa que resaltar es el tema de seguridad, ya que creo que seria conveniente ver el tema de habilitar o no el muestreo de errores, porque seria posible dejar visibles password y algoritmos de seguridad.

Por el resto, me parece muy bueno, y mas el "truco" de definir funciones dentro del constructor para asi poder utilizar set_error_handler qeu no acepta metodos (viste que esta bueno poder definir funciones dentro de funciones (historial ))

Felicitaciones Webstudio!!!!

Saludos.
Nok.
__________________
La casa de Noktemplate.
Zonaphp.com - Php en español.

¿Que esperas de NokTpl 2? Deja tu comentario.

Blog
Mas o menos asi .
  #8 (permalink)  
Antiguo 29/09/2003, 16:22
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 6 meses
Puntos: 69
(Maldito Nok, no imagino las horas que habrás pasado buscando ese Tema en el que quedaba tan al expuesto lo cabezadura que puedo ser, sobre todo cuando no leo bien el manual de PHP. Gracias )

Bueno, lástima que haya tenido que ir a buscar este tema ya en la página 10, pero que le vamos a hacer, parece que a le gente mucho aún no le interesa la POO.

Bueno, el caso es que aquí dejo la última versión de la Clase, ahora recibe el objeto "contexto" como parámetro, lo que nos permite pasarle a la clase, Objetos que hagan lo que nosotros queramos con el error (imprimirlo en pantalla, logearlo en archivo, guardarlo para luego recuperarlo, etc).

Código PHP:
<?php
class AdminError
{
    
/**
     * Atributo
     *
     **/
    
    
var $_contexto;

    function 
AdminError$contexto )
    {
        
$this->_contexto =& $contexto;
        
$GLOBALS['_OBJETO_CONTEXTO'] =& $this->_contexto;
        
$this->activo(false);
    }
    
    function 
iniciar()
    {
        if(!
function_exists('adm_error'))
        {
            function 
adm_error($numero$mensaje$archivo$linea$contexto$retorna=false)
            {
                
$objContexto =& $GLOBALS['_OBJETO_CONTEXTO'];
                
$objContexto->inicializar($numero$mensaje$archivo$linea$contexto);
                if(
$retorna)
                    return 
$objContexto->leer();
                else
                {
                    print 
$objContexto->leer();
                    
print_r($contexto);
                }
            }
        }
        
        if(!
function_exists('errorFatal'))
        {
            function 
errorFatal($buffer)
            {
                
$buffer_temporal $buffer;
                
$texto strip_tags($buffer_temporal);
                if(
preg_match('/Parse error: (.+) in (.+)? on line (\d+)/'$texto$c))
                    return 
adm_error(E_USER_ERROR$c[1], $c[2], $c[3], ""true);
                if(
preg_match('/Fatal error: (.+) in (.+)? on line (\d+)/'$texto$c))
                    return 
adm_error(E_USER_ERROR$c[1], $c[2], $c[3], ""true);
                return 
$buffer;
            }
        }

        if( 
$this->activo() )
        {
            
error_reporting(E_ALL);
            
ob_start('errorFatal');
            
set_error_handler('adm_error');
        } else
            
error_reporting(0);
    }
    
    function 
activo()
    {
        switch(
func_num_args())
        {
            case 
1$this->_activo func_get_arg(0); $this->iniciar(); break;
            case 
0: return $this->_activo;
        }
    }
    
}
?>
Y este es un objeto ejemplo, que hace lo que hacía en anterior, o sea, mostrar los datos del error generado, y un contexto dentro del archivo que causó el error:

Código PHP:
<?php
class Contexto
{
    
    var 
$_numero "";
    
    var 
$_mensaje "";
    
    var 
$_lineas 5;

    
/**
     * Constructor
     * @access protected
     */
    
function inicializar($numero$mensaje$archivo$linea$contexto)
    {
        
$this->_mensaje "
        <b>Error:</b> $mensaje<br><hr>
        <b>Archivo:</b> $archivo<br><hr>
        <b>Línea:</b> $linea<br><hr>
        <b>Contexto del Código:</b><br><pre>"
.
        
$this->obtenerContexto($archivo, (int) $linea)."</pre><hr>";
    }
    
    
/**
     *
     * @access public
     * @return void 
     **/
    
function leer()
    {
        return 
$this->_mensaje;
    }
    
    
/**
     *
     * @access public
     * @return void 
     **/
    
function obtenerContexto($archivo$linea)
    {
        if (!
file_exists($archivo)) 
        { 
            
//  Nos fijamos que el archivo exista
            
return "El contexto no puede mostrarse - ($archivo) no existe"
        } elseif ((!
is_int($linea)) OR ($linea <= 0)) { 
            
//  Verificamos que el numero de linea sea válido
            
return "El contexto no puede mostrarse - ($linea) es un número inválido de linea"
        } else {
            
//  leemos el codigo
            
$codigo file$archivo );
            
$lineas count($codigo);

            
//  calculamos los numeros de linea
            
$inicio $linea $this->_lineas
            
$fin $linea $this->_lineas
            
//  verificaciones de seguridad
            
if ($inicio 0$inicio 0;
            if (
$fin >= $lineas$fin $lineas;
            
$largo_finstrlen($fin) + 2;
            
            for (
$i $inicio-1$i $fin$i++)
            { 
                
//  marcamos la linea en cuestion.
                
$color=($i==$linea-1?"red":"black");
                
$salida[] = "<span style='background-color: lightgrey'>".($i+1).
                            
str_repeat("&nbsp;"$largo_fin strlen($i+1)).
                            
"</span><span style='color: $color'>".
                            
htmlentities($codigo[$i]).'</span>';
            } 
            return 
trim(join(""$salida)); 
        }
    }
}
?>
Por ahora, así como está es bastante extensible y utilizable, pero aún sigo buscando mejorarlo. Si alguien tiene algún comentario al respecto de esta nueva "version", please, no duden en dejarla aqui.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #9 (permalink)  
Antiguo 29/09/2003, 16:26
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 6 meses
Puntos: 69
Perdonen... olvidé colocar un ejemplo de uso. Bueno, sería algo así :
Código PHP:
<?php
include('clases/class.AdminError.php');

$error = new AdminError( new Contexto );

// Aqui podría seguir la lógica normal de nuestro programa, causando errores comunes o los nuestros propios:
echo "Un error programático<br>";
$a 0;
echo 
"Un error lanzado por el programador<br>";
trigger_error("Este es un error generado por el programador"E_USER_WARNING);
?>
(Espero no haberme equivocado demasiado en este ejemplo, ya es tarde y no lo probé, pero estoy 73% seguro de que funciona :) )

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #10 (permalink)  
Antiguo 03/10/2003, 07:53
Nok
 
Fecha de Ingreso: abril-2001
Mensajes: 302
Antigüedad: 23 años
Puntos: 0
Buenisima Webstudio,

Algunos detalles,

En:
Código PHP:
function inicializar($numero$mensaje$archivo$linea$contexto
para que esta la variable $contexto?, ademas hay un print_r() que me parece se te quedo olvidado.

En la clase contexto, no le encontre la utilidad (se me puede haber pasado) a la variable $_numero.

Por lo demas creo que esta más que bien, creo que solo le faltaria, definir o mejor dicho documentar la interface de la clase contexto, para asi saber como extenderla, podria ser una clase abstracta de la que todas hereden (que original lo mio )

Felicitaciones nuevamente y esperemos la proxima versión.

Saludos
Nok.
__________________
La casa de Noktemplate.
Zonaphp.com - Php en español.

¿Que esperas de NokTpl 2? Deja tu comentario.

Blog
Mas o menos asi .
  #11 (permalink)  
Antiguo 03/10/2003, 08:28
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 6 meses
Puntos: 69
Que emoción !!!
Alguien que realmente miró el código

Es cierto, se me escapó un print_r de más en el método AdminError::iniciar ( dentro de la función adm_error ) que deberia quitarse.

La variable $_numero, en Contexto, tenía la noble tarea de servirme como identificador del tipo de error que se le había pasado, si un Warning o un Fatal Error, pero por el momento eso quedó sin efecto. Así que también se podria ir por ahora.

Y la "extraña" variable $contexto que reciben los objetos como parámetro, según el manual de PHP, es un puntero al Hash de variables declaradas ( $GLOBALS, vamos ) como para tener una idea de en qué estado estaba todo al momento de producirse el error.

Me parece que me voy a poner con lo de la documentación para que cualquier persona que quiera hacer un objeto compatible puda. Gracias por el consejo Pablin, se que es lo primero que debería haber hecho .

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #12 (permalink)  
Antiguo 03/10/2003, 12:20
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 21 años
Puntos: 2
juas juas, juas,,, como te lo curras WebS. gracias, es una muy buana classe si que si... gracias.
__________________
3w.valenciadjs.com
3w.laislatv.com
  #13 (permalink)  
Antiguo 13/01/2005, 16:18
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 7 meses
Puntos: 1
"pero quería que esto se hiciera automáticamente, o sea, nada de estar indicando $objError->error("algo salió mal"); sino que queria utilizar las funciones que nos da PHP actualmente para el manejo de los errores."
En el clavo!: Llevo cerca de una semana intentando precisamente eso, juas, mi gestión de errores actualmente se basaba justamente en:
$objError->error("algo salió mal"); y busquedas continuas en los E_ERROR de php: preg_replace, etc... ,
pero encima yo redirecciono y paso datos por URL... buffff, así que de pm webstudio, como siempre, no sé qué tienes en esa pelota que siempre adivinas nuestras dudas más retorcidas .
Aún recuerdo cuando empezaba con PHP y descubrí tus "webs modulares" ggg.

En fin, pos nada, muchísimas gracias, no creo que lo use como clase, se me escapa esto por ahora, pero si todo lo que concierne a las expresiones regulares para identificar errores de PHP.

PD: Info, info please de esas excepciones!!
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 13/01/2005 a las 16:20
  #14 (permalink)  
Antiguo 04/08/2005, 08:05
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Es muy interesante el como y or que de la class webstudio!, y felicitaciones!...Hay metodos del diseño que me llamaron la atención, y como algunos no los logro comprender mucho (me estoy iniciando de a poco en oop), como ser estos metodos como encapsulados:
Código PHP:
<?php
function iniciar() 
    { 
        if(!
function_exists('adm_error')) 
        { 
           function 
adm_error(....
?>
La cosa, que para ver su funcionamiento lo quice correr, pero no puedo hacer que me devuelva algo en pantalla. Me lleve la segunda version, y no consegui en el poco tiempo que la toque, hacerla funcionar.
Intente con:
Código PHP:
<?php
include('class/class.AdminError.php'); 
$error = new AdminError( new Contexto ); 
$p "algo";
file$p );
?>
Tambien con
Código PHP:
<?php
include('class/class.AdminError.php'); 
$error = new AdminError( new Contexto ); 
$p "algo";
file$p ) or die ($error->xxx); #Donde en xxx le puese metodo por metodo (leer, obtenerContexto, etc, ya no sabia que intentar).
?>
y tambien cambié el or die por un or trigger_error. Intente cargando metodos (como ser iniciar) antes del error, y tratar de instanciar a otros despues del mismo, sin lograr nada....
Me siento el mas nabo ....alguien me puede dar un ejemplo de como funciona dicha classe please?

Gracias!!

PD: Esto que hace que no esta en la faqs?
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #15 (permalink)  
Antiguo 18/08/2005, 01:12
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 18 años, 9 meses
Puntos: 1
Buenas Webstudio,

Ni por asomo se me habría ocurrido la utilidad de esta clase. Tengo que decir que tiene muy buena pinta, pero no he podido probar su funcionamiento.

He utilizado el código que has publicado, pero no me da ningún error :)

Tengo php 5.0.4 no se si eso tiene algo que ver...

Gracias y un saludo.
__________________
www.pensandoenred.com
  #16 (permalink)  
Antiguo 19/08/2005, 15:45
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 18 años, 8 meses
Puntos: 0
Están bien las clases pero veo un pequeño problema :)

El problema está a la hora de recoger los errores fatales y de sintaxis con expresiones regulares(al menos como están en el script).

Si en algún momento el script imprime por pantalla por ejemplo:
'Fatal error: algo in algo on line 12'

Saltará un Error cuando en realidad no existe.

Código PHP:
<?php
// activamos todos los errores
error_reporting(E_ALL);

include(
'./clases/class.AdminError.php');

$error = new AdminError;
// Esto hace saltar un error fatal que no existe en realidad
echo 'Fatal error: algo in algo on line 12';
?>
Lo digo para que quede constancia..no se si el script está solo para correr del lado del programador y corregir mas rapidamente sus errores en programación.
Pero seguro que alguien lo usa como base a la hora de hacer su propio gestor de errores para su web(por ejemplo) o su foro, etc. En ese caso habría que optimizar un poco mas el tema de las expresiones regulares para recojer los errores fatalas y de sintaxis(aunque estos no estén presentes en un script qe funcione).


Particularmente he probado eliminando strip_tags() y añadiendo <b></b> en los sitios correspondientes en la ER, pero no me a dado resultado :) aunque tampoco me he comido mucho el coco :)


Joder, que manía tengo de hacer los posts interminables xDD.
Solo me queda felicitar al autor por este codigo que es bastante bueno y útil :)
  #17 (permalink)  
Antiguo 05/06/2006, 12:22
 
Fecha de Ingreso: junio-2006
Mensajes: 1
Antigüedad: 17 años, 11 meses
Puntos: 0
Excelente

Por alguna razon.. al principio no funciono nada.. empeze a revisar el codigo, actualize el cache y funciono... :)
Bueno... la revisare... le metere la mano y les comento que paso.. saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:31.