PARSE ERRORS

dsujoy
15 de Junio del 2004
Estimados amigos, estaba intentando realizar un sistema de notificacion de errores, ya tengo implementadas funciones que en caso de que un query mysql falle redireccione al usuario a una pagina de error sin mostrar el problema que tubo la pagina realmente y ademas me mande un email a mi notificandome que pagina tiro el error, que linea y que error fue.
Ahora mi idea era hacer lo mismo con los parse errors, los mismos cortan la ejecucion de un pagina por lo que si un usuario entra a un php al que por ejemplo le falta un ; en una linea el usuario veria info que no deseo que vea...un error, con un codigo de error, linea de error y pagina. Mi interes es tambien realizar alguna funcion que trace un parse error y me lo envie a mi mail...y al usuario lo redireccione a una pagina tipo error.php que le pida disculpas por las molestas ocasionadas!!
alguien sabe como manjear parse errors?

espero que alguien pueda ayudarme.

Saludos.
Damian

Jes?arrillo
15 de Junio del 2004
HOla, mira lo que puedes hacer es deshabilitar que se muestren los errores en el php.ini, en display_errors le pones que sea igual a off. Asi ya no se muetsran los errores.

Viendo el php.ini viene una variable para indicar si quieres que se guarden los errores en un log. Lo que me dio la idea de que puedes checar el log, no se el formato en el que grabe los errores, pero por ejemlpo, puedes hacer una aplicacion batch que cada n minutos cheque ese log, y te lo mande por mail, etc. lee mas el php.ini trae unas cosillas po ahi, mira te pego algo archivo;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; error_reporting is a bit-field. Or each number up to get desired error
; reporting level
; E_ALL - All errors and warnings
; E_ERROR - fatal run-time errors
; E_WARNING - run-time warnings (non-fatal errors)
; E_PARSE - compile-time parse errors
; E_NOTICE - run-time notices (these are warnings which often result
; from a bug in your code, but it's possible that it was
; intentional (e.g., using an uninitialized variable and
; relying on the fact it's automatically initialized to an
; empty string)
; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
; initial startup
; E_COMPILE_ERROR - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR - user-generated error message
; E_USER_WARNING - user-generated warning message
; E_USER_NOTICE - user-generated notice message
;
; Examples:
;
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors except for notices
;
error_reporting = E_ALL & ~E_NOTICE

; Print out errors (as a part of the output). For production web sites,
; you're strongly encouraged to turn this feature off, and use error logging
; instead (see below). Keeping display_errors enabled on a production web site
; may reveal security information to end users, such as file paths on your Web
; server, your database schema or other information.
display_errors = On

; Even when display_errors is on, errors that occur during PHP's startup
; sequence are not displayed. It's strongly recommended to keep
; display_startup_errors off, except for when debugging.
display_startup_errors = Off

; Log errors into a log file (server-specific log, stderr, or error_log (below))
; As stated above, you're strongly advised to use error logging in place of
; error displaying on production web sites.
log_errors = Off

; Set maximum length of log_errors. In error_log information about the source is
; added. The default is 1024 and 0 allows to not apply any maximum length at all.
log_errors_max_len = 1024

; Do not log repeated messages. Repeated errors must occur in same file on same
; line until ignore_repeated_source is set true.
ignore_repeated_errors = Off

; Ignore source of message when ignoring repeated messages. When this setting
; is On you will not log errors with repeated messages from different files or
; sourcelines.
ignore_repeated_source = Off

; If this parameter is set to Off, then memory leaks will not be shown (on
; stdout or in the log). This has only effect in a debug compile, and if
; error reporting includes E_WARNING in the allowed list
report_memleaks = On

; Store the last error/warning message in $php_errormsg (boolean).
track_errors = Off

; Disable the inclusion of HTML tags in error messages.
;html_errors = Off

; If html_errors is set On PHP produces clickable error messages that direct
; to a page describing the error or function causing the error in detail.
; You can download a copy of the PHP manual from http://www.php.net/docs.php
; and change docref_root to the base URL of your local copy including the
; leading '/'. You must also specify the file extension being used including
; the dot.
;docref_root = "/phpmanual/"
;docref_ext = .html

; String to output before an error message.
;error_prepend_string = "<font color=ff0000>"

; String to output after an error message.
;error_append_string = "</font>"

; Log errors to specified file.
;error_log = filename

; Log errors to syslog (Event Log on NT, not valid in Windows 95).
;error_log = syslog

Jes?arrillo
15 de Junio del 2004
Hola de nuevo, mira encontre algo en la docuemntación de PHP, dice que si pones una arroba antes de cada funcion, no se mostraran mensajes si es que se presentan, y estos se guardan en una variable, mira aqui esta lo de la docuemntación:

Operadores de Control de Errores
PHP ofrece soporte para un operador de control de errores: el signo de arroba (@). Cuando es colocado al comienzo de una expresión en PHP, cualquier mensaje de error que pudiera generarse a causa de esa expresión será ignorado.

Si la característica track_errors está habilitada, cualquier mensaje de error generado por la expresión será almacenado en la variable $php_errormsg. La variable será sobrescrita en cada instancia de error, así que realice sus chequeos de forma temprana si quiere usarla.



<?php
/* Error intencional de archivo */
$mi_archivo = @file ('archivo_que_no_existe') or
die ("La apertura de archivo ha fallado: el error fue '$php_errormsg'");

// esto funciona con cualquier expresion, no solo con funciones:
$valor = @$cache[$llave];
// no producira una anotacion si el indice $llave no existe.

?>



Nota: El operador @ trabaja sólo sobre expresiones. Una simple regla de oro es: si usted puede tomar el valor de algo, entonces puede usar el operador @ sobre ese algo. Por ejemplo, puede usarlo al inicio de variables, llamadas a funciones y sencencias include(), constantes, y así sucesivamente. No puede usarlo sobre definiciones de función o clase, ni sobre estructuras condicionales como if y foreach, y así sucesivamente.

***********************************

Te recomiendo que le des una vista a esta liga:
http://mx2.php.net/manual/es/language.operators.errorcontrol.php

Yo creo que con esto teines, suerte, y que termines lo tuyo

Atte. Jesús