Foros del Web » Programando para Internet » PHP »

Control/Tratamiento de errores

Estas en el tema de Control/Tratamiento de errores en el foro de PHP en Foros del Web. Como hacer que en el momento que se produzca un error no se pare el script, que no salga el mensaje de error de PHP ...
  #1 (permalink)  
Antiguo 18/01/2004, 02:42
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Pregunta Control/Tratamiento de errores

Como hacer que en el momento que se produzca un error no se pare el script, que no salga el mensaje de error de PHP y que la función devuleva un string personalizado.

or return ('loquesea') No funciona pq tiene que ser exit o die.
Otra cosa es que no quiero poner @ delate de las funciones, y tampoco deshabilitar error_reporting (E_ALL).

Cual es la tecnica que se usa en control/tratamiento de errores?

Si mirais la función, vereis lo que quiero hacer.
Código PHP:
function get_comment($img
{
    global 
$lang;
    
    
$dir_comm dirname($img);
    
$img_name basename($img);
    
$path_file_comm $dir_comm '/' COMM_FILE_NAME;
    
$info = array();
    
    if ( !
is_readable($path_file_comm) ) {
        return 
NULL;
    } else {
        
$fp fopen($path_file_comm'r') or return($lang['error']['fopen'];
        while ( !
feof($fp) OR ($info[0] != $img_name)) { 
            
$line fgets($fp4096) or return($lang['error']['fgets']);
            
$info explode('<->'$line);
        }
        
fclose($fp) or return ($lang['error']['fclose']);
        if ( 
feof($fp) ) {
            return 
NULL;
        } else {
            return 
$info;
        }
    } 

  #2 (permalink)  
Antiguo 19/01/2004, 10:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cuando se proboca un error en una función .. normalemte esta devuelve tu "boolean" (en FALSE) .. por eso se usa el "OR" .. en esa misma llamada de la función; que luego sea un "die()" para parar la ejecución del scirpt y mostrar un mensaje o un exit para completamente parar la ejecución del escript u -ojo- Cualquier otra llamada a función . .ya es cosa tuya.

En resumen .. Puedes usar "or" . .o un IF() normal:

Código PHP:
if (fopen(....)){
// tu proceso ..
} else {
// tu gestión del error ...
// si lo tiens en una función y quieres hacer un return OK ..
// Podrías hacer un log en un archivo de texto plano con el error .. o cualquier otra cosa.

Lo mismo para cualquier función de PHP (que suelen devolver un "FALSE" si se produce un error).

A su vez la mayoría de funciones cuando devuelve el error PHP presenta un mensaje de error .. así que tendrías que desactivarlo también .. sea función por función con @ delante .. o bien con error_reporting() al nivel más bajo. Para tu caso concreto .. el @ el lo ideal bajo una estructura condicional IF() simple.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 19/01/2004, 18:18
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Entoncessi dices que en el or es como un if y que puedo poner lo que se, pq no funciona esto cuando quiero que si fallla haga un return?

$fp = fopen($path_file_comm, 'r') or return($lang['error']['fopen'];

I se queja en el return.

La sentencia anterior seria equivalente a esta?

if ( !($fp = fopen($path_file_comm, 'r')) ) {
return($lang['error']['fopen'];
}
  #4 (permalink)  
Antiguo 20/01/2004, 06:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues no sé .. has probado ambas propuestas?

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 20/01/2004, 07:52
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
function exist() {

$fp = @fopen('','w+')) or (Return 'OK');

if ($fp = @fopen('','w+')) Return 'OK';
else {
Return 'False';
}

($fp = @fopen('','w+')) ? Return 'OK' : Return 'FALSE';
}

print(exist());

La unica que funciona es la opcion del medio.
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




La zona horaria es GMT -6. Ahora son las 17:01.