Uso de @

Ricardo Mun~oz A. rmunoz en pjud.cl
Mie Oct 4 09:25:16 CLT 2006


Rodrigo Fuentealba wrote:
>>  On 10/3/06, Esteban Osorio <eosorio en economia.cl> wrote:
>> >
>> > Hola lista,
>> >
>> > Alguien me podría explicar para que se utiliza el símbolo @ antes de
>> algunas funciones como por ejemplo en este código:
>> >
>> > $result =
>> @move_uploaded_file($_FILES['image_file']['tmp_name'],
>> $newimage);
>> > if(empty($result))
>
> La @ es para ejecutar una sentencia/instrucción sin reportar errores,
> es una MUY MALA práctica, puesto que podría hacerte perder un par de
> horas depurando. Presenta el mismo efecto que 
> ini_set('display_errors','off');

segun el comentario de display_errors en php.ini:

; 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 = Off

es decir, para sitios en produccion se recomienda deshabilitar cualquier
mensaje de error que aparezca en la pagina. lo que se debe usar es lo
siguiente:

; 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 = On

activando log_errors los mensajes de error quedan registrados en un archivo
de log, en el caso de Linux en el mismo archivo de errores del Apache, para
asi poder revisar los errores sin que le aparezcan al usuario...

para sitios en desarrollo es casi una obligacion usar display_errors = 
On... ;)

> Lo ideal es que no lo uses y que
> valides si existe un error dentro de tu código para presentar las
> acciones pertinentes vía un die(); o un echo('<h1>ERROR
> AQUI!!!</h1>'); (por poner ejemplos)

puede seguir usando la @ pero igualmente detectar/reportar el error:

$result = @move_uploaded_file($_FILES['image_file']['tmp_name'], 
$newimage);

if($result == false)
{
   mail("admin en dominio","error en pagina","blablabla");
   die("Ocurrio un error...");
}
else
{
   // codigo
}

aunque la @ de mas arriba estaria demas en un sitio en produccion ya que
estarian desactivados todos los mensajes de error con display_errors = Off.

-- 
Ricardo Mun~oz A.
Usuario Linux #182825 (counter.li.org)


Más información sobre la lista de distribución PHP