Como has dicho, si se utiliza en un archivo no existente, getimagesize genera una advertencia:
este código:
if ($data = getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
le conseguirá una
Warning: getimagesize(not-existing.png) [function.getimagesize]:
failed to open stream: No such file or directory
Una solución sería utilizar el @ operator, para enmascarar ese error:
if ($data = @getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
Como no existe el archivo, los datos todavía será $ falsa; pero no se mostrará ninguna advertencia.
Otra solución sería check if the file exists, antes de usar getimagesize; algo como esto haría:
if (file_exists('not-existing.png') &&
($data = getimagesize('not-existing.png'))
) {
echo "OK";
} else {
echo "NOT OK";
}
Si no existe el archivo, getimagesize no se llama - lo que significa que ninguna advertencia
Sin embargo, esta solución no es el que se debe utilizar para las imágenes que se encuentran en otro servidor, y se accede a través de HTTP (si es así en este caso), ya que significará dos solicitudes al servidor remoto.
Para imágenes locales, eso estaría bastante bien, supongo; El único problema que veo es el aviso generado cuando hay un error de lectura que no se enmascara.
Por último:
- I permitiría errores que se mostrarán en su servidor Developpement,
- Y no se mostraban los de su servidor de producción - ver
display_errors
, por eso ;-)
Eso sí, si file_exists() dice que el archivo existe, getimagesize() todavía puede fallar, ya que el archivo puede eliminarse justo entre llamadas a métodos. Veeery poco probable, pero sucede en los peores momentos ... – ya23
@ ya23: cierto; pero no deberías tener mucha suerte ^^ Y no me gusta enmascarar errores con @: si lo estás usando y tienes un problema, en general es difícil depurarlo rápidamente :-( –
Bueno, creo que el @ es bastante sucio :) – Gigala